我正在通过uwsgi运行一个使用nginx的django站点。问题是当流量变得很大时,uwsgi进程占用大量的CPU时间。同样的配置可以在测试服务器上正常工作,并模拟大量并发通信量。
下面是uwsgi进程的一个strace日志。http://dl.dropbox.com/u/43017476/strace.log
还有一些系统:
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 = 300nginx与谷歌的其他教程非常相似。我一直在想办法,但没有运气。然而,我发现了很多这样的作品:
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站点提供服务,没有问题。
任何想法都值得赞赏。
发布于 2012-08-07 22:31:56
strace很可能不会显示什么在消耗CPU时间,因为它显示了系统调用。显示进程消耗的CPU时间是在应用程序本身中执行代码所花费的时间。您显示的读/写/轮询很可能是正常的MySQL通信,或者是应用程序轮询mysql (非阻塞)以查找新的通信量。
对于如何找到高CPU的原因,我并没有一个真正的解决方案,但是我想我会让您避免花费太多的时间在strace输出中寻找答案:)
https://serverfault.com/questions/329494
复制相似问题