Aumentando o desempenho do Postfix para o correio de saída

1

Estamos tentando otimizar um Dell PowerEdge 1850, procs de 3GHz duplo, 3072MB de RAM, executando o Postfix 2.8.4 e assinando mensagens com o OpenDKIM 2.4.1.

A saída

iostat -x é:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.59    0.04    0.20    0.24    0.00   98.94

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    11.57  0.01  4.97     0.27   132.35    26.63     0.03    6.09   2.03   1.01
sda1              0.00     0.00  0.00  0.00     0.00     0.00    13.40     0.00   16.26  15.73   0.00
sda2              0.00    11.57  0.01  4.97     0.27   132.35    26.63     0.03    6.09   2.03   1.01
dm-0              0.00     0.00  0.01 16.54     0.27   132.35     8.01     0.11    6.55   0.61   1.01
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00    3.42   0.44   0.00

Saída principal:

top - 22:10:04 up 86 days,  1:46,  5 users,  load average: 2.99, 2.94, 2.82
Tasks: 227 total,   8 running, 218 sleeping,   0 stopped,   1 zombie
Cpu(s): 66.1%us,  1.3%sy,  0.0%ni, 32.3%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   3115136k total,  2819188k used,   295948k free,   248620k buffers
Swap:  5177336k total,        0k used,  5177336k free,  1695580k cached

Estamos usando o SwiftMailer para enviar e-mails para o Postfix via SMTP. Se tentarmos acionar mais de 3 instâncias paralelas de um script PHP que envia via SwiftMailer, a média de carga vai para 3+ e a velocidade de entrega diminui. Leva quase um dia inteiro para enviar 500 mil mensagens. Os servidores de e-mail remotos aceitam alegremente nossos e-mails e qualquer adiamento é passado para uma retransmissão de fallback.

Durante um envio, o nosso qshape mostra a fila esvaziando rapidamente:

                                     T  5 10 20 40 80 160 320 640 1280 1280+
                              TOTAL 10 10  0  0  0  0   0   0   0    0     0
                          gmail.com  2  2  0  0  0  0   0   0   0    0     0
                          yahoo.com  2  2  0  0  0  0   0   0   0    0     0
                            aol.com  1  1  0  0  0  0   0   0   0    0     0
                            aim.com  1  1  0  0  0  0   0   0   0    0     0
                           evhs.net  1  1  0  0  0  0   0   0   0    0     0
                         myactv.net  1  1  0  0  0  0   0   0   0    0     0
                        hotmail.com  1  1  0  0  0  0   0   0   0    0     0
                     googlemail.com  1  1  0  0  0  0   0   0   0    0     0

E como estamos usando um retransmissor de fallback, a fila adiada em nosso servidor SMTP principal está vazia.

Estamos usando um servidor de nomes de cache recursivo local (Não consolidado) e seguimos todas as dicas de ajuste no README de Ajuste do postfix. Mas ainda estamos coçando a cabeça sobre onde procurar o gargalo a respeito do porquê de levar todo o dia para enviar 500 mil mensagens. Eu li outros artigos de otimização Postfix (incluindo um no ServerFault), mas o culpado sempre parece ser IO. Mas nossa saída iostat parece que os discos não estão ocupados.

Onde mais devemos começar a procurar?

    
por SteveJ 27.07.2011 / 07:18

3 respostas

2

Sem assinatura e verificação de Spam de saída, o Postfix pode lidar facilmente com 360.000 e-mails por hora.

O problema aqui é o uso da CPU de 66,1% nos. Como você não fornece informações sobre os processos que consomem essa carga, eu diria que eles não estão relacionados ao Postfix. Eles são o processo de assinatura do DKIM ou os processos do PHP.

Você precisa ajustar os processos responsáveis pela carga e não o processo responsável pela entrega de mensagens.

    
por 27.07.2011 / 13:49
0

"Se tentarmos acionar mais de 3 instâncias paralelas de um script PHP que envia via SwiftMailer, a média de carga vai para 3+ e a velocidade de entrega diminui."

Você pode dar uma olhada mais de perto na memória do script e / ou nos requisitos / carga de processamento da CPU.

    
por 27.07.2011 / 09:27
0

Você está usando raid de software? Eu tive um problema há pouco tempo, e raid (raid 5) foi um problema. Ou use o raid 10, ou não use raid.

Em termos de postfix, tente ver default_process_limit. Talvez use um valor de 50. Além disso, instale localmente um servidor de nomes de armazenamento em cache (por exemplo, dnsmasq), poderia ajudar com o DNS.

HTH

    
por 27.07.2011 / 10:13