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

我正在通过uwsginginx运行django网站。 问题是当stream量变大时,uwsgi进程需要很多的CPU时间。 相同的configuration在testing服务器上正常工作,siege / ab模拟大量的并发stream量。

这里是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, events=POLLIN|POLLPRI}], 1, 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(非阻塞)来寻找新的通信量。

我真的没有一个解决scheme,你如何find你的高CPU的原因,但我想我会指望你远离花费太多的时间在strace输出寻找答案:)