postfix leva 60-90ms para fila de e-mail - normal?

8

Estamos vendo alguns (talvez?) atrasos estranhos ao enviar e-mails individuais para nosso servidor Postfix local.

Para ajudar a diagnosticar o problema, escrevi um pequeno programa de teste que envia cinco e-mails:

get smtp 1ms   (  1 ms)
email 0 677ms  (676 ms)
email 1 802ms  (125 ms)
email 2 890ms  ( 88 ms)
email 3 973ms  ( 83 ms)
email 4 1088ms (115 ms)

Descontando o handshaking no primeiro e-mail, são cerca de 90 ms por e-mail. Esses tempos também foram corroborados com outro aplicativo de teste escrito por outra pessoa usando um caminho de código diferente, de modo que parece estar relacionado ao servidor.

Liguei o log detalhado e vejo que o atraso está entre o final da mensagem \r\n\r\n e o recebimento:

[16:31:29.95] [SEND] \r\n.\r\n
[16:31:30.05] [RECV] 250 2.0.0 Ok: queued as B128E1E063\r\n

[16:31:30.08] [SEND] \r\n.\r\n
[16:31:30.17] [RECV] 250 2.0.0 Ok: queued as 4A7DE1E06E\r\n

[16:31:30.19] [SEND] \r\n.\r\n
[16:31:30.27] [RECV] 250 2.0.0 Ok: queued as 68ACC1E072\r\n

[16:31:30.28] [SEND] \r\n.\r\n
[16:31:30.34] [RECV] 250 2.0.0 Ok: queued as 7EFFE1E079\r\n

[16:31:30.39] [SEND] \r\n.\r\n
[16:31:30.45] [RECV] 250 2.0.0 Ok: queued as 9793C1E07A\r\n

Os intervalos de tempo contam a história (descontando o handshaking necessário para o e-mail inicial) - cada e-mail está aguardando cerca de 60 a 90 milissegundos para que o postfix filtre!

Isso parece ... excessivo ... para mim. É "normal" para o postfix levar de 60 a 90 ms para cada e-mail enviado? Ou eu apenas tenho expectativas irracionais? Eu esperaria que o servidor postfix local enfileirasse o email em cerca de 20ms, no topo!

    
por Jeff Atwood 11.06.2010 / 03:46

2 respostas

12

Isso parece normal. Se você executar várias conexões no envio de mensagens paralelas, você ainda recebe 90 ms por email? Isso permitirá que você aumente facilmente sua taxa para enviar e-mails.

Eu sei que outros MTAs (sendmail) irão fsync () para garantir que o e-mail aceito seja enviado para o disco antes de enviar a resposta, para que o e-mail não seja descartado se o sistema travar depois de aceitar o e-mail. postfix provavelmente faz bem.

Você pode testar isso colocando o diretório de spool de e-mail no tmpfs temporariamente e vendo quanto tempo leva para aceitar o e-mail.

Outras coisas que poderiam estar fazendo durante essa janela de 90 ms são: verificação de vírus, verificação de lista negra, etc. Mas você provavelmente saberia se elas estavam configuradas.

    
por 11.06.2010 / 04:00
6

As melhores práticas do Postfix dizem que você deve fazer a maior parte da filtragem antes da fila inicial para evitar:

  1. desperdiçando recursos em mensagens que você não deve aceitar em primeiro lugar;
  2. evite o envio de mensagens de erro de volta (gastando, portanto, os recursos para o email original e a mensagem de erro);
  3. evitando enviar mensagens de erro para destinatários errados.

Portanto, o tempo de enfileiramento não é otimizado para economizar recursos. Se você desabilitar todas as verificações em smtpd_recipient_restrictions no main.cf do postfix, você provavelmente conseguirá filas mais rápidas em o custo de mais erros e recebendo mais mensagens de erro (erradas) para os usuários. Isso seria perfeitamente aceitável se fosse apenas o servidor de saída de um aplicativo, por exemplo.

    
por 11.06.2010 / 11:20

Tags