接《一次docker中的nginx进程响应慢问题定位记录》
在排查这个问题的时候,我先使用netstat 去查看,看到底是内核协议栈的连接请求没给到进程,还是进程accept链路慢了,或者recv数据慢了,记录如下:
netstat -anpl |grep -i 57372 tcp 0 0 127.0.0.1:57372 127.0.0.1:7010 ESTABLISHED 15044/curl tcp 86 0 127.0.0.1:7010 127.0.0.1:57372 ESTABLISHED -
可以看到,curl发送的请求,内核协议栈是已经接受了,但是对应的链路有个小小的细节,那就是establish状态的链接,进程号查不到。
我以前没有看过netstat的源码,只是通过strace大概知道netstat是去读取 /proc/net/tcp (或者/proc/net/tcp6) 来获取链接信息的,
cat /proc/net/tcp sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 0: 00000000:18A7 00000000:0000 0A 00000000:00000000