已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景
我做网络工程 3 年,最近一次 P1 卡了 2 天没定位到根因:核心网关应用接口 P99 从稳态 80ms 抖到 1.2s,持续约 20 分钟,但 tcpdump 抓 5 分钟看 SYN-ACK RTT 稳定在 2–3ms、没有重传、没有 RST;应用日志显示同期 8% 请求 504,业务侧报"网络抖了",我抓包又抓不出问题,扯皮到半夜。
现象
ss -ti 平均 rtt 2.8ms、retrans 计数为 0;netstat -s 也没有 retrans;/proc/net/softnet_stat 第一列(dropped)在故障窗口内 +12,第二列(processed)正常;perf stat -p <pid> -e context-switches,cpu-migrations 看上下文切换率没有明显尖刺;已尝试的排查
tcpdump -i eth0 -w /tmp/x.pcap 抓 5 分钟,Wireshark 按流看 RTT 分布,P99 = 3.2ms,重传 0,RST 0;cat /proc/net/softnet_stat,dropped 列 +12,怀疑 softirq 来不及处理;-Xlog:gc* 抓 Full GC 220ms,但当时在途请求只有 3 个,解释不了 8% 超时;perf trace -e epoll_wait,epoll_ctl 跑 30s,epoll_wait 返回延迟 P99 40μs,没看到用户态阻塞;mpstat -P ALL 1 看没有单核跑满,load 在 1.2 左右(16C)。期望得到的答案形态
如果社区里有人踩过 softnet_stat dropped 非零的坑,或者用过 eBPF(如 tcplife、profile)做过这类定位,求分享具体命令和判读口径。