MatrixStability 开源:从零搭建 Android 长稳压测系统(Agent-Server 架构 + 崩溃指纹去重)
2026/7/21 6:32:09 网站建设 项目流程

# MatrixStability 开源:从零搭建 Android 长稳压测系统(Agent-Server 架构 + 崩溃指纹去重)

> 7 月 17 日我分享了一篇《从零搭建 Android 长稳压测系统》,介绍了 Pro 版的商业架构设计思路,收到很多私信问能不能学习代码。今天把核心架构抽离成一个**开源学习版 MatrixStability Lite**,保留 Agent-Server 分离、指纹去重、可视化看板等核心模块,5 分钟本地跑起来,适合学习和小团队试用。

---

## 一、为什么需要自动化长稳压测?

传统模式的问题:
1. **人工盯测**:多人轮班,成本高
2. **重复崩溃**:同一 bug 触发上百次,人工筛选效率低
3. **报告滞后**:压测结束才整理,错过最佳修复窗口

---

## 二、系统架构:Agent-Server 分离

```
[Agent] 设备侧日志采集 → HTTPS → [Server] 云端解析 + 去重 + 报告
```

**Agent 职责:**
- ADB 日志实时采集
- ANR / Crash / Tombstone 多模态识别
- 定时上报(可配置间隔)

**Server 职责:**
- FastAPI 高并发网关
- Pydantic 数据校验
- 崩溃指纹去重
- Jinja2 可视化看板

---

## 三、核心算法:崩溃指纹去重 ⭐

### 3.1 问题定义

同一 bug 可能触发多次,堆栈相似但不完全相同:

```
# 第 1 次
at com.example.MainActivity.onCreate(MainActivity.java:45)

# 第 100 次(内存地址不同)
at com.example.MainActivity.onCreate(MainActivity.java:45)
```

### 3.2 简化版算法(Lite)

```python
def extract_stack_trace(raw_content: str) -> str:
# 正则提取堆栈
pattern = r'at\s+([a-zA-Z_][\w.]+)\.([a-zA-Z_][\w$]*)\s*\(([^)]+)\)'
matches = re.findall(pattern, raw_content)
# 取前 3 层作为特征
return "|".join([f"{m[0]}.{m[1]}" for m in matches[:3]])

def generate_fingerprint(stack_trace: str) -> str:
return hashlib.md5(stack_trace.encode()).hexdigest()
```

**流程:**
原始日志 → 提取堆栈 → 取前 3 层 → MD5 哈希 → 查重 → 新崩溃/计数+1

### 3.3 算法局限与优化方向

| 局限 | 优化方向 |
|------|---------|
| 无法处理相似堆栈 | 参数化归一化(忽略内存地址) |
| 固定取 3 层 | 动态层数(根据堆栈深度调整) |
| 简单 MD5 | 局部敏感哈希(SimHash) |

---

## 四、快速开始

```bash
# 1. 克隆
git clone https://github.com/PerformanceTool999998/matrix-stability-lite.git

# 2. 启动 Server
cd server && pip install -r requirements.txt && uvicorn main:app --reload

# 3. 启动 Agent
cd agent && python agent_lite.py

# 4. 查看报告
open http://localhost:8000/api/v1/dashboard
```

---

## 五、项目结构

```text
matrix-stability-lite/
├── server/ # FastAPI 服务端
│ ├── app/
│ │ ├── database.py # SQLite + SQLAlchemy
│ │ ├── models.py # 数据模型
│ │ ├── schemas.py # Pydantic 校验
│ │ └── routers/
│ │ ├── upload.py # 日志上传 + 指纹去重
│ │ └── dashboard.py # 报告看板
│ ├── main.py
│ ├── templates/
│ │ └── dashboard.html # 可视化看板
│ └── requirements.txt

├── agent/ # 客户端
│ ├── agent_lite.py # 日志采集与上传
│ └── requirements.txt

├── docs/
│ ├── ARCHITECTURE.md # 架构详解 + 面试要点
│ └── RESUME.md # 简历包装指南

├── docker-compose.yml
├── .env.example
└── README.md
```

---

## 六、实测效果

使用 Lite 版模拟数据测试:

| 指标 | 数据 |
|------|------|
| 监控设备 | 1 台(DEMO_DEVICE_001) |
| 总崩溃次数 | 334 次 |
| 独立缺陷 | 3 个 |
| 去重率 | ~99% |

看板页面实时展示:
- 设备状态
- 崩溃类型分布(ANR / JAVA_CRASH / TOMBSTONE)
- 指纹去重统计
- 最近崩溃列表

---

## 七、学习价值

| 模块 | 可学习内容 |
|------|-----------|
| FastAPI | 路由、校验、异步 |
| SQLAlchemy | ORM、迁移、查询优化 |
| 指纹去重 | 哈希、特征提取、相似度 |
| 可视化 | Jinja2、数据聚合、报表设计 |

---

## 八、扩展方向

- [ ] 接入真实 ADB 日志(替换模拟数据)
- [ ] 钉钉 / 企业微信告警推送
- [ ] 多设备并发调度(设备池 + 队列)
- [ ] React + ECharts 前端升级
- [ ] PostgreSQL 替换 SQLite
- [ ] Redis 缓存热点指纹

---

## 九、关于 Pro 版

Lite 版为开源学习版,保留核心架构与简化算法,采用 MIT 协议,可自由学习使用。

如需以下企业功能,请通过 GitHub Issue 联系:
- 多租户管理
- 高级指纹去重(模糊匹配 + 参数化归一化)
- 云端部署(Render + Neon PostgreSQL)
- RSA 授权验证与 License 管理
- 高级报告模板与自动分级

---

## 十、与 Pro 版的差异

| 功能 | Lite(开源) | Pro(商业) |
|------|-------------|------------|
| 部署 | 本地 / Docker | 云端 Render |
| 数据库 | SQLite | PostgreSQL |
| 去重算法 | 简化 MD5 | 闭源指纹引擎 |
| 模糊匹配 | ❌ | ✅ |
| 多租户 | ❌ | ✅ |
| 授权验证 | ❌ | RSA + License |
| 协议 | MIT | 商业授权 |

---

## 结语

开源地址:[https://github.com/PerformanceTool999998/matrix-stability-lite](https://github.com/PerformanceTool999998/matrix-stability-lite)

欢迎 Star、Issue、PR,一起学习进步!

---

**关于作者:** Android 测试工程师,专注自动化测试与稳定性测试。

**相关阅读:**
- [《从零搭建 Android 长稳压测系统:7x24h 无人值守 + 云端指纹去重实战》](https://blog.csdn.net/m0_50486420/article/details/162976503)(Pro 版架构设计思路)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询