Analise o log strace do uwsgi para descobrir por que é necessário alto uso da CPU

4

Estou executando um site django com nginx através do uwsgi. O problema é que o processo do uwsgi consome muito tempo da CPU quando o tráfego fica pesado. A mesma configuração funciona bem no servidor de teste e o siege / ab simula o tráfego concorrente pesado.

Aqui está um log strace do processo uwsgi. link

E alguns 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

O nginx conf é praticamente o mesmo que outros tutoriais do Google. Eu tenho tentado descobrir isso, mas sem sorte. No entanto, encontrei muitas dessas peças:

22:12:02.932276 read(8, "
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
22:12:02.932276 read(8, "%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16384) = 11
22:12:02.932504 poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
22:12:02.932547 write(8, "%pre%%pre%%pre%SET NAMES utf8", 19) = 19
22:12:02.932643 read(8, "%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16384) = 11
22:12:02.933237 poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
22:12:02.933279 write(8, "%pre%%pre%%pre%set autocommit=0", 21) = 21
22:12:02.933330 read(8, "%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16384) = 11
%pre%%pre%%pre%%pre%%pre%%pre%", 16384) = 11 22:12:02.932504 poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) 22:12:02.932547 write(8, "%pre%%pre%%pre%SET NAMES utf8", 19) = 19 22:12:02.932643 read(8, "%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16384) = 11 22:12:02.933237 poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) 22:12:02.933279 write(8, "%pre%%pre%%pre%set autocommit=0", 21) = 21 22:12:02.933330 read(8, "%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16384) = 11

Considerando que o descritor de arquivo 8 é um soquete mysql. Mas o servidor Mysql parece funcionar muito bem. Eu posso ver que cada chamada de sistema de "leitura" consome mais tempo de CPU, mas não sei o que está errado aqui. O mesmo servidor de banco de dados vem servindo o antigo site do PHP sem problemas.

Qualquer ideia apreciada.

    
por chenxee 09.11.2011 / 22:46

1 resposta

0

strace provavelmente não mostrará o que está consumindo o tempo de CPU, pois mostra as chamadas do sistema. O tempo de CPU que um processo é mostrado consumir é o tempo gasto na execução de código no próprio aplicativo. A leitura / escrita / enquete que você está mostrando é muito provável que a comunicação normal do MySQL, ou seja, a aplicação está checando o mysql FD (sem bloqueio) para procurar por um novo tráfego.

Eu realmente não tenho uma solução para você sobre como encontrar a causa da sua alta CPU, no entanto, eu imaginei que você não iria gastar muito tempo procurando a resposta na saída strace:)

    
por 08.08.2012 / 00:31