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 框架图展示了四个核心概念之间的典型制约环路。灰色箭头表示“影响方向”,橙色说明框标注了常见的移动端现场关联现象。

压测四象限联动关系 吞吐量 · 响应时间 · 并发用户 · 资源利用率 — 制约环路 吞吐量 TPS / QPS / FPS 响应时间 p50 / p90 / p99 并发用户 活跃设备数 资源利用率 CPU/内存/GPU/网络 负载增加 超出拐点后恶化 频繁重试/排队 资源满载→吞吐下滑 用户数增多 延迟大→用户流失 移动端现场观察 • 并发用户增加 → 吞吐量初始线性增长,当系统资源(如 Android 渲染线程或 iOS 主线程)达瓶颈时,响应时间急剧抬升(常称“拐点”)。 • 资源利用率过高的典型表现:CPU 持续 >85%、内存频繁 GC 导致掉帧。 • 弱网场景下,响应时间对并发用户数的变化更敏感,资源利用率反而可能下降, 因为请求被 IO 阻塞导致 CPU 空闲——这是压测分析时必须警惕的假象。

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 个概念的变化拐点。