Je fais tourner un site django avec nginx via uwsgi. Le problème est que le processus uwsgi prend beaucoup de temps CPU lorsque le trafic devient important. La même configuration fonctionne bien sur le serveur de test et siege/ab simule un trafic concurrent important.
Voici un journal de strace du processus uwsgi. http://dl.dropbox.com/u/43017476/strace.log
Et un peu de 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
La configuration de nginx est à peu près la même que celle des autres tutoriels de Google. J'ai essayé de le comprendre mais sans succès. Cependant, j'ai trouvé beaucoup de ces pièces :
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
Le descripteur de fichier 8 est un socket mysql. Mais le serveur Mysql semble fonctionner correctement. Je peux voir que chaque appel système "read" consomme le plus de temps CPU mais je ne sais pas ce qui ne va pas ici. Le même serveur de base de données a servi l'ancien site PHP sans problème.
Toutes les idées sont les bienvenues.