我通过uwsgi运行一个带Nginx的
django站点.问题是当流量变大时,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站点提供服务.
任何想法都赞赏.