cat result.jtl | awk -F, 'NR>1{print $2}' | sort -n | awk '{a[NR]=$1} END{print "p50",a[int(NR*0.5)],"p99",a[int(NR*0.99)]}'
jmeter -g result.jtl -o report

压测报告写着平均响应 120 毫秒、最大 4.2 秒,评审时被当成达标。上线后用户侧 P99 稳定在 4 秒,投诉集中在整点。报告里没有任何分位数据。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,平均值把 5% 的慢请求摊平了,4 秒的长尾在均值里只贡献几十毫秒。JMeter 的聚合报告默认只给平均和中位数,P99 要单独开。压测时长内还有一段 GC 尖峰被平均掉。

围绕「P99 分位统计」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

处理上按这个顺序:报告里固定输出 P50 P90 P99 P999 四列;按分钟看 P99 曲线 找出尖峰出现的时刻;把超时阈值和错误率一起写进报告首页;用同一份 jtl 重新算分位 确认和线上口径一致。

改完只确认一件事:报告里能看到 P99 的具体数值,和用户侧监控相差在 10% 以内。

作者 9823189