1. 压测核心概念:吞吐量、响应时间、并发用户、资源利用率
移动端压测的四个基石概念——吞吐量、响应时间、并发用户、资源利用率——构成了性能评估的完整坐标系。它们之间并非孤立指标,而是相互制约、共同描述系统在负载下的行为特征。理解这四个概念及其耦合关系,是合理设计压测场景、解读报告、定位瓶颈的前提。
1.1 概念速览与度量单位
| 核心概念 | 定义简述 | 常见度量单位 | 移动端关注点 |
|---|---|---|---|
| 吞吐量 | 单位时间内系统成功处理的请求数或数据量 | TPS(每秒事务数)、QPS(每秒查询数),在移动端常以“每分钟请求数”或“每秒页面渲染帧数”衡量 | 接口吞吐、资源加载速率、渲染帧率(FPS) |
| 响应时间 | 从发起请求到收到完整响应所经过的时间 | 毫秒(ms)或秒(s);常用百分比指标:p50(中位数)、p90、p99、p999 | 页面首屏耗时、API 完整返回时间、动画掉帧延迟 |
| 并发用户 | 同时与系统交互的虚拟用户或真实设备数 | 整数(个);需区分在线用户与同时发起请求的活跃用户 | 并发登录、同时拉取推送、群聊瞬时消息压力 |
| 资源利用率 | 系统资源(CPU、内存、网络、磁盘、GPU)被占用的比例 | 百分比(%),内存常以 MB/GB 表示,网络以 kb/s 或 MB/s 表示 | 电量消耗、发热阈值、内存泄漏排查、显存占用 |
移动端特有换算提醒:由于移动设备网络环境波动大(弱网、延迟抖动、基站切换),仅用平均响应时间(avg)容易掩盖长尾问题。请务必采集 p90、p99 值,并在弱网模拟器场景下重复验证。
1.2 四象限联动关系图
下面这张 SVG 框架图展示了四个核心概念之间的典型制约环路。灰色箭头表示“影响方向”,橙色说明框标注了常见的移动端现场关联现象。
1.3 关键量化关系与压测推导公式
在理想线性模型下,这四个概念可通过 Little’s Law(利特尔定律) 初步关联:
并发用户数 = 吞吐量(T) × 平均响应时间(R)
推导应用举例:
- 目标吞吐量 100 TPS & 期望平均响应时间 200 ms
- 所需并发用户数 ≈ 100 × 0.2 = 20(虚拟用户)
- 如果实际用 40 并发用户测得吞吐仅 80 TPS,说明系统在并发 20 附近已达瓶颈
⚠️ 移动端局限提示:Little’s Law 假设系统处于稳定态且请求均匀到达。移动端压测时,设备侧任务调度可能因系统省电策略、线程优先级翻转、前台/后台切换而剧烈波动。务必在压测脚本中加入“稳态检测”逻辑,排除启动预热和非稳定区间数据。
1.4 移动端特有的概念偏移
- 吞吐量偏移:除了传统的 API 吞吐,移动端必须关注 渲染吞吐——即屏幕每秒能合成的帧数。GPU 渲染管线满载时,即便 API 响应快,用户仍会感知卡顿。
- 响应时间拆分:标准 Web 压测只计网络往返时间。移动端需拆分为
DNS 解析 + TCP 握手 + TLS 协商 + 请求传输 + 服务端处理 + 响应传输 + 客户端渲染。其中每一步都可以通过Charles / Wireshark / PerfDog抓包验证。 - 并发用户上限:受设备内存和 CPU 核心数限制,单台测试手机不宜承载过多虚拟用户(一般 Android 模拟器 ≤ 50 并发 / 进程,iOS 真机 ≤ 20 并发)。超出后测试机自身会先成为瓶颈,污染压测数据。
- 资源利用率视角:移动端新增 温度 作为间接资源指标。当 CPU/GPU 温度超过触发降频阈值(iOS ~85°C,Android 因芯片而异),系统会自动降频,导致响应时间暴涨、吞吐腰斩。监控温度比单纯看 CPU% 更能提前预警。
1.5 快速采集命令范例
以下命令用于在压测过程中,从 Android 设备实时拉取资源利用率数据。请将命令嵌入压测执行脚本的 before / after 或并行子进程中。
# ---------- 1. CPU & 线程数 ----------
adb shell top -n 1 -d 0.5 | grep -E "com.example.app|com.your.app"
# ---------- 2. 内存(PSS) ----------
adb shell "dumpsys meminfo com.example.app | grep -E 'TOTAL PSS|TOTAL RSS|Dalvik|Native'"
# ---------- 3. 网络流量(区分WiFi/蜂窝) ----------
adb shell "cat /proc/net/dev | grep -E 'wlan0|rmnet'"
# ---------- 4. GPU 频率与使用率(仅Snapdragon设备) ----------
adb shell "cat /sys/class/kgsl/kgsl-3d0/gpuclk"
adb shell "cat /sys/class/kgsl/kgsl-3d0/utilization"
# ---------- 5. 电池温度(单位:0.1°C) ----------
adb shell "dumpsys battery | grep temperature"
生产环境建议:编写稳定版 AdbMon 封装脚本,将上述多条命令合并为一条 JSON 输出,并使用
watch -n 1 循环记录;配合 tcpdump 或 packet capture 可在单次压测中同时获得资源 & 网络时间线,用于精确对齐 4 个概念的变化拐点。