Eu gerencio um site e envio de newsletter por e-mail para assinantes. Tanto a hospedagem na web quanto o envio de e-mail são feitos pela mesma máquina.
Tenho cerca de 100.000 inscritos que optaram pelo meu boletim informativo diário por e-mail. Meu script PHP fez um bom trabalho enviando e-mails para todos eles até bem recentemente, mas à medida que a lista cresceu, não consegui acompanhar.
Quando corro na parte superior, tenho carga muito alta - geralmente pelo menos 6 ou 7, às vezes até 15 - mesmo que eu tenha apenas duas CPUs. No entanto, quando executo o sar, minha CPU fica inativa em média 30% do tempo. Então, parece que não estou ligado à CPU. Quando executo o iostat, parece que não estou vinculado ao disco, porque meu% util para cada dispositivo é muito baixo (não mais que 5%).
Dado que não pareço estar ligado à CPU ou ligado ao disco, porque é que o topo reporta uma carga tão elevada?
Além disso, como não pareço estar ligado à CPU ou ao disco vinculado, por que meu script de envio de e-mail não consegue acompanhar?
Veja o que eu vejo quando está no topo:
top - 11:33:28 up 74 days, 18:49, 2 users, load average: 7.65, 8.79, 8.28
Tasks: 168 total, 5 running, 162 sleeping, 0 stopped, 1 zombie
Cpu(s): 38.9%us, 58.6%sy, 0.8%ni, 0.0%id, 0.7%wa, 0.2%hi, 0.8%si, 0.0%st
Mem: 3083012k total, 2144436k used, 938576k free, 281136k buffers
Swap: 2048248k total, 39164k used, 2009084k free, 1470412k cached
Veja o que eu vejo quando estou executando o iostat -mx:
avg-cpu: %user %nice %system %iowait %steal %idle
34.80 1.20 55.24 0.37 0.00 8.38
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.19 71.70 1.59 29.45 0.02 0.07 5.90 0.55 17.82 1.16 3.59
sda1 0.00 0.00 0.00 0.00 0.00 0.00 7.10 0.00 13.80 13.72 0.00
sda2 0.05 50.45 1.13 24.57 0.01 0.29 24.25 0.35 13.43 1.15 2.97
sda3 0.05 10.17 0.20 2.33 0.01 0.05 43.75 0.05 20.96 2.45 0.62
sda4 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 70.50 70.50 0.00
sda5 0.07 0.22 0.03 0.07 0.00 0.00 32.84 0.08 856.19 8.03 0.08
sda6 0.02 5.45 0.03 0.72 0.00 0.02 67.55 0.02 26.72 5.26 0.39
sda7 0.00 1.56 0.00 0.42 0.00 0.01 38.04 0.00 8.88 5.84 0.24
sda8 0.01 3.84 0.20 1.35 0.00 0.02 28.55 0.05 31.90 4.08 0.63
Veja o que vejo ao executar o sar:
09:40:02 AM CPU %user %nice %system %iowait %steal %idle
09:50:01 AM all 30.59 1.01 49.80 0.23 0.00 18.37
10:00:08 AM all 31.73 0.92 51.66 0.13 0.00 15.55
10:10:06 AM all 30.43 0.99 48.94 0.26 0.00 19.38
10:20:01 AM all 29.58 1.00 47.76 0.25 0.00 21.42
10:30:01 AM all 29.37 1.02 47.30 0.18 0.00 22.13
10:40:06 AM all 32.50 1.01 52.94 0.16 0.00 13.39
10:50:01 AM all 30.49 1.00 49.59 0.15 0.00 18.77
11:00:01 AM all 29.43 0.99 47.71 0.17 0.00 21.71
11:10:07 AM all 30.26 0.93 49.48 0.83 0.00 18.50
11:20:02 AM all 29.83 0.81 48.51 1.32 0.00 19.52
11:30:06 AM all 31.18 0.88 51.33 1.15 0.00 15.47
Average: all 26.21 1.15 42.62 0.48 0.00 29.54
Aqui estão os principais processos listados no momento em que aconteceu a execução de top -c
:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8180 mysql 16 0 57448 19m 2948 S 26.6 0.7 4702:26 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/bristno.pid --skip-external-locking
26956 brristno 17 0 0 0 0 Z 8.0 0.0 0:00.24 [php] <defunct>
26958 brristno 17 0 94408 43m 37m R 5.0 1.4 0:00.15 /usr/bin/php /home/brristno/public_html/dbv.php
22852 nobody 16 0 9628 2900 1524 S 0.7 0.1 0:00.17 /usr/local/apache/bin/httpd -k start -DSSL
8591 brristno 34 19 96896 13m 6652 S 0.3 0.4 0:29.82 /usr/local/bin/php /home/brristno/bin/mailer.php 1qwqyb6 i0gbor
24469 nobody 16 0 9628 2880 1508 S 0.3 0.1 0:00.08 /usr/local/apache/bin/httpd -k start -DSSL
25495 nobody 15 0 9628 2876 1500 S 0.3 0.1 0:00.06 /usr/local/apache/bin/httpd -k start -DSSL
26149 nobody 15 0 9628 2864 1504 S 0.3 0.1 0:00.04 /usr/local/apache/bin/httpd -k start -DSSL
Obrigado, Dmitri!
1) Já tenho um script que cancela a inscrição de endereços de e-mail que foram rejeitados pelo menos cinco vezes no último mês, portanto, espero que isso mantenha minha lista relativamente limitada a endereços de e-mail ativos.
2) Estou usando o exim 4.69. Meu arquivo de configuração está em
/etc/exim.conf
e meus arquivos de log estão em:
/ var / log / exim_mainlog
/ var / log / exim_paniclog
/ var / log / exim_rejectlog
Além disso, quando olho em /etc/syslog.conf, vejo o seguinte:
# Log all the mail messages in one place.
mail.* -/var/log/maillog
Eu não sei o que o "-" significa no início de -/var/log/maillog
, mas quando olho naquele arquivo, fica claro que muito está sendo registrado lá.
Além disso, muita coisa está sendo registrada neste arquivo:
/ var / log / exim_mainlog
Desde que adicionei ao /etc/exim.conf esta linha:
no_message_logs
Eu pensei que isso desabilitaria o log de mensagens (eu reiniciei o exim), mas quando eu olho para / var / log / maillog e em / var / log / exim_mainlog ambos os arquivos ainda estão recebendo novas entradas de log.
Pergunta: Como posso desabilitar a maioria / todos os registros de exim?
3) Quando eu olho em / var / log / exim_paniclog, vejo uma tonelada de entradas como esta:
2010-12-19 04:03:32 1PUFB1-0006xZ-GF User 0 set for local_delivery transport is on the never_users list
Depois de procurar por um tempo, parece que isso significa que o Exim está tentando entregar o endereço de e-mail raiz. Qual é a melhor maneira de lidar com essas entregas de e-mail para o usuário root usando o mínimo possível de recursos da CPU?