5 votes

Analyser le journal de strace de uwsgi pour savoir pourquoi il utilise beaucoup de CPU.

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.

1voto

WhatHiFi Points 378

Strace ne vous montrera probablement pas ce qui consomme le temps de l'unité centrale car il montre les appels système. Le temps CPU qu'un processus est censé consommer est le temps passé à exécuter le code dans l'application elle-même. Les lectures/écritures/polls que vous voyez sont très probablement des communications MySQL normales, ou l'application interroge la FD mysql (non bloquante) à la recherche d'un nouveau trafic.

Je n'ai pas vraiment de solution à vous proposer pour trouver la cause de votre CPU élevé, mais je me suis dit que je vous éviterais de passer trop de temps à chercher la réponse dans la sortie de strace :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X