Мы видим некоторые (возможно?) Странные задержки при отправке отдельных писем на наш локальный сервер 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 мс, максимум!
Ответы:
Это звучит нормально. Если вы запускаете несколько соединений параллельно, отправляя почту, вы все равно получаете 90 мс на почту? Это позволит вам легко поднять ставку, чтобы вы могли отправлять почту.
Я знаю, что другие MTA (sendmail) будут использовать fsync (), чтобы гарантировать, что принятая почта передается на диск перед отправкой ответа 250, чтобы не сбрасывать электронную почту, если в системе происходит сбой после приема почты. postfix, вероятно, делает то же самое.
Вы можете проверить это, временно поместив каталог спулинга почты в tmpfs и посмотрев, сколько времени займет прием почты.
Другие вещи, которые он может делать во время этого окна 90 мс: сканирование на вирусы, проверка черного списка и т. Д. Но вы, вероятно, знаете, были ли они настроены.
источник
Лучшие практики Postfix говорят, что вы должны выполнить большую часть фильтрации до начальной очереди, чтобы избежать:
Таким образом, время ожидания не оптимизировано для экономии ресурсов. Если вы отключите все проверки в
smtpd_recipient_restrictions
postfix'ах,main.cf
вы, вероятно, получите более быстрые очереди за счет большего количества ошибок и получения большего количества (неправильных) сообщений об ошибках для пользователей. Это было бы вполне приемлемо, если бы это был только выходной сервер для приложения, например.источник