linux没有统一的“系统平均响应时间”指标,需按场景分层查看:ping的avg值仅反映icmp延迟,iostat的await才是磁盘i/o真实平均响应时间,curl的ttfb则体现http端到端延迟。

Linux 没有统一的“系统平均响应时间”这个指标——它不是像 uptime 那样直接输出的全局值,而是分层、分场景、分设备的具体延迟度量。你要看哪一层?是网络?磁盘?还是应用请求?不同目标,查法完全不同。
ping 的 avg 值只反映 ICMP 往返延迟
执行 ping -c 10 example.com,末尾出现的 rtt min/avg/max/mdev = X/X/X/X ms 中第二个数就是这个 avg。它快、轻量、内核原生支持,适合快速摸底链路连通性。
- DNS 解析耗时被算进去了:
ping example.com和ping 93.184.216.34结果可能差 50ms+ - 很多 CDN 或云主机禁 ICMP,
avg会失真甚至全超时 - 完全不感知 TCP 握手、TLS 协商、服务端处理等真实业务延迟
iostat -x 看磁盘 I/O 的 await 才是真响应时间
await 是 Linux 下最接近“磁盘平均响应时间”的指标:单位毫秒,表示单个 I/O 请求从发出到完成的平均耗时(含队列等待 + 设备处理)。这才是决定用户是否卡住的核心数字。
- HDD:持续 >10ms 就该介入;>50ms 基本确认严重瓶颈
- SSD/NVMe:>1ms 就需关注;>5ms 可能已存在调度或队列问题
-
r_await显著高于w_await→ 查读密集型操作(如数据库全表扫描) -
w_await高但w/s(每秒写次数)很低 → 小写阻塞队列,不是吞吐问题
curl -w 测 HTTP 端到端真实延迟
想测用户打开网页的真实耗时,curl 是更贴边的选择。它走 TCP+HTTP,能分离各阶段:
curl -w"DNS: %{time_namelookup} | TCP: %{time_connect} | TLS: %{time_appconnect} | TTFB: %{time_starttransfer} | TOTAL: %{time_total}\n" -o /dev/null -s https://example.com
-
%{time_namelookup}:DNS 查询时间(直连 IP 可归零) -
%{time_connect}:TCP 连接建立完成时间 -
%{time_appconnect}:TLS 握手完成时间(HTTPS 必看) -
%{time_starttransfer}:首字节到达时间(TTFB),含服务端处理 - 别用
%{time_total}判断“页面可交互”,多次运行取 TTFB 中位数更准
别只盯着一个 avg,延迟藏在路径和层级里
同一个 avg 数值背后,可能是完全不同的瓶颈:DNS 解析慢、中间跳点丢包、TLS 版本协商卡顿、磁盘 await 突增、甚至调度器配置错误(比如 NVMe 设备启用了 mq-deadline)。真正难的不是查出一个数字,而是判断这个数字到底代表哪一层出了问题——而它往往不在你第一眼看到的地方。











