偶发性超时最头疼:应用层日志一片平静,问题却出在网络。改业务代码加埋点既侵入又未必抓得到——eBPF 给了我们一个不改一行的解法。
借助 bcc 或 bpftrace 挂载到内核的 tcp_sendmsg / tcp_retransmit 等探针,可以捕获每个 socket 的建连、RTT、重传与丢包,再按 PID 关联到具体的 Java 进程。
bpftrace -e 'kprobe:tcp_retransmit_skb {
@[pid, comm] = count(); }'
当某次超时发生时,内核态的重传计数会瞬间飙升——这比在应用层猜原因直接得多。