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

8

Мы видим некоторые (возможно?) Странные задержки при отправке отдельных писем на наш локальный сервер 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 миллисекунд для постфикса в очереди!

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

Джефф Этвуд
источник
3
Включена ли фильтрация, например проверка SPF, поиск обратного DNS или Ident? Используете SMTP или MSP?
Крис С

Ответы:

12

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

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

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

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

MikeyB
источник
6

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

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

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

jneves
источник