Назад | Перейти на главную страницу

postfix занимает 60-90 мсек для очереди электронной почты - нормально?

Мы наблюдаем некоторые (возможно?) Странные задержки при отправке отдельных писем на наш локальный сервер Postfix.

Чтобы помочь диагностировать проблему, я написал небольшую тестовую программу, которая отправляет 5 писем:

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)

Не считая квитирования в первом письме, это примерно 90 мс на одно письмо. Эти тайминги также были подтверждены другим тестовым приложением, написанным кем-то другим с использованием другого кодового пути, поэтому похоже, что оно связано с сервером.

Я включил подробное ведение журнала и вижу, что задержка между концом сообщения \r\n\r\n и получите:

[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

Временные интервалы рассказывают историю (без учета квитирования, необходимого для первоначального электронного письма) - каждое электронное письмо ждет около 60-90 миллисекунд, пока постфикс окажется в очереди!

Это кажется .. чрезмерным .. мне. "Нормально" ли, что postfix отправляет 60-90 мсек на каждое отправленное письмо? Или у меня просто необоснованные ожидания? Я ожидаю, что локальный сервер postfix поставит электронное письмо в очередь примерно через 20 мс, вершины!

Звучит нормально. Если вы запускаете несколько подключений при параллельной отправке почты, вы все равно получаете 90 мс на почту? Это позволит вам легко повысить ставку отправки писем.

Я знаю, что другие MTA (sendmail) будут использовать fsync (), чтобы гарантировать, что принятая почта зафиксирована на диске перед отправкой ответа 250, так что электронная почта не будет отброшена, если система выйдет из строя после принятия почты. postfix, вероятно, тоже.

Вы можете проверить это, временно поместив каталог спула почты в tmpfs и посмотрев, сколько времени требуется для приема почты.

Другое, что это мог в течение этого 90-миллисекундного окна выполняются следующие действия: сканирование на вирусы, проверка черного списка и т. д. Но вы, вероятно, знаете, были ли они настроены.

Лучшие практики Postfix гласят, что вы должны выполнять большую часть фильтрации перед начальной очередью, чтобы избежать:

  1. трата ресурсов на сообщения, которые вы не должны принимать в первую очередь;
  2. избегайте отправки сообщений об ошибках обратно (следовательно, тратьте ресурсы на исходное письмо и сообщение об ошибке);
  3. предотвращение отправки сообщений об ошибках неправильным получателям.

Таким образом, время ожидания в очереди не оптимизируется для экономии ресурсов. Если отключить все проверки в smtpd_recipient_restrictions в постфиксе main.cf вы, вероятно, можете получить более быстрое формирование очереди за счет большего количества ошибок и получения большего количества (неправильных) сообщений об ошибках для пользователей. Это было бы вполне приемлемо, например, если бы это был только выходной сервер для приложения.