ubuntu – 分析uwsgi strace日志以找出为什么它需要高CPU使用率

前端之家收集整理的这篇文章主要介绍了ubuntu – 分析uwsgi strace日志以找出为什么它需要高CPU使用率前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我通过uwsgi运行一个带Nginxdjango站点.问题是当流量变大时,uwsgi进程会占用大量的cpu时间.相同的配置在测试服务器上工作正常,而siege / ab模拟大量并发流量.

这是uwsgi进程的一个strace日志. http://dl.dropbox.com/u/43017476/strace.log

还有一些sysctl:

fs.file-max = 128000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.core.somaxconn = 250000
net.ipv4.tcp_keepalive_time = 300

Nginx conf与Google的其他教程非常相似.我一直想弄清楚但没有运气.但是我发现了很多这样的东西:

22:12:02.932276 read(8,"\7\0\0\2\0\0\0\2\0\0\0",16384) = 11
22:12:02.932504 poll([{fd=8,events=POLLIN|POLLPRI}],1,0) = 0 (Timeout)
22:12:02.932547 write(8,"\17\0\0\0\3SET NAMES utf8",19) = 19
22:12:02.932643 read(8,"\7\0\0\1\0\0\0\2\0\0\0",16384) = 11
22:12:02.933237 poll([{fd=8,0) = 0 (Timeout)
22:12:02.933279 write(8,"\21\0\0\0\3set autocommit=0",21) = 21
22:12:02.933330 read(8,"\7\0\0\1\0\0\0\0\0\0\0",16384) = 11

文件描述符8是一个MysqL套接字.但MysqL服务器似乎工作得很好.我可以看到每个“读取”系统调用消耗大部分cpu时间,但不知道这里出了什么问题.同一个数据库服务器一直在为以前的PHP站点提供服务.

任何想法都赞赏.

最佳答案
strace可能不会显示消耗cpu时间的内容,因为它显示系统调用.显示进程消耗的cpu时间是在应用程序本身中执行代码所花费的时间.您正在显示的读/写/轮询很可能是正常的MysqL通信,或者是应用程序轮询MysqL FD(非阻塞)以查找新流量.

对于如何找到高cpu的原因,我真的没有一个解决方案,但我想我会指出你花费太多时间在strace输出中寻找答案:)

猜你在找的Nginx相关文章