最近线上某些服务器老是报cpu load高,同机房其他机器却没有问题。排查发现以下异常
ss -nl
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 1024 *:10009 *:*
0 100 127.0.0.1:25 *:*
32 511 *:443 *:*
0 32 *:8000 *:*
0 128 *:10050 *:*
0 15 *:8006 *:*
0 1024 127.0.0.1:9000 *:*
0 5 *:8649 *:*
3318 7680 *:80 *:*
0 5 *:53 *:*
0 128 *:22 *:*
可以看到80端口的Recv-Q好大,并且观察一段时间发现他会涨到Send-Q一样大。其中在listen状态:
Recv-Q:代表建立的连接还有多少没有被accept
Send-Q:代表listen backlog值
其他状态:
Recv-Q:内核中的数据还有多少没有被应用程序读取
Send-Q:代表内核中发送队列里还有多少数据没有收到ack
本例可以看到nginx应为什么原因堵住了没有及时去accept新的连接,当然后来查看iostat排查到机器的写文件效率很低,nginx会在写access_log的时候堵住,大量时间用在了记日志上。