原帖地址:
https://blog.csdn.net/acmer1183/article/details/52014216
最近线上某些服务器老是报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的时候堵住,大量时间用在了记日志上。
本文针对线上服务器频繁出现CPU负载高的问题进行排查,通过分析ss-nl命令输出,发现Nginx在处理80端口连接时存在Recv-Q积压问题。进一步检查发现,Nginx在写access_log时因磁盘I/O效率低下导致阻塞。通过对日志记录过程的优化,有效缓解了服务器负载。
3736

被折叠的 条评论
为什么被折叠?



