Медленные SMTP-соединения с перегрузкой памяти Google (Контроль времени ожидания Exim)

360
steev

В нашей организации есть несколько серверов, которые генерируют и отправляют множество писем (мы не спамеры, это законные письма пользователям, которые просили об этом). Exim на этих машинах настроен так, чтобы пытаться доставлять почту только один раз, а в случае сбоя переадресовывать почту на сервер-концентратор переполнения, который будет продолжать попытки. Я просто добавил новый сервер в это стадо, добавил его в нашу запись SPF и настроил его точно так же, как другие наши серверы. Тем не менее, мы должны быть в черном списке или, скорее, в сером списке с Google, вероятно, потому что сетевой блок этого нового сервера имеет плохую репутацию, так как электронные письма на учетные записи Gmail всегда терпят неудачу с ошибкой отключения с первой попытки. Я попытался вручную отправить на адреса Gmail, и если мне разрешено сделать более одной попытки, это работает нормально, я вижу, что первая попытка не удалась, а затем вторая попытка работает, без проблем. Но, как я уже сказал,

Проблема в том, что я получаю кучу процессов Exim, которые сидят без дела, ожидая, когда Google отключится, я полагаю, что это приводит к увеличению объема памяти на машине (это виртуальная машина, так что всего 512M RAM), а затем OOM_killer ядра начинает убивать процессы, и мы теряем электронные письма, которые должны выходить.

Я не ожидаю, что в ближайшее время выйду из серого списка Google, поэтому реальное решение, которое я вижу, состоит в том, чтобы выяснить, как заставить процессы Exim быстрее сдаваться, чтобы у меня не было недостатка памяти. Есть ли способ в конфигурации exim сделать это? Или просто ограничить, сколько всего процессов exim выполняется в системе? Обратите внимание, что это отдельные программы exim, запущенные нашим программным обеспечением для генерации почты, они не являются потомками основного Exim MTA. Я не вижу в документах Exim ничего такого, что могло бы касаться этих вопросов.

примечание: я уже пытался использовать hubbed_hosts, чтобы Exim даже не пытался использовать Google, но это не работает. Может быть, у меня неправильное форматирование моего файла hubbed_hosts? Вот и все (с запутанным именем домена):

.*google.com: bulkflow.mydomain.org .*gmail.com: bulkflow.mydomain.org 

Если я ошибаюсь и могу исправить это, может быть, это ответ.

0

1 ответ на вопрос

0
wurtel

Remove the .* from your hubbed_hosts file, plain gmail.com etc. is correct.

Furthermore check the excellent documentation and look for items such as queue_run_max, queue_load_max, queue_only and smtp_receive_timeout.

Note that exim is very good in correctly handling messages, even if a proces that is handling a message is killed the message will remain in the queue, so losing messages should not be a concern.

I have used exim to deliver hunderds of thousands of emails per day and exim offers plenty of tuning paramters to let things work smoothly.

Спасибо за информацию о hubbed_hosts! Чтобы уточнить, я имел в виду, что наше программное обеспечение, которое генерирует электронные письма, убивается. Таким образом, мы теряем все электронные письма, над которыми он все еще работает. steev 9 лет назад 0
Теперь я изменил записи в hubbed_hosts, но я все еще вижу, как взорвалось количество exim procs, закончилась память, и наш генератор электронной почты был убит ядром. я не вижу в exim docs способа ограничить общее количество exim-процессов, работающих в системе. Я думаю, единственное, что нужно сделать, это изменить наш код, чтобы он не запускал слишком много exim-процессов одновременно. steev 9 лет назад 0
Разве вы не видели, чтобы я упоминал параметры `queue_ *`? wurtel 9 лет назад 0
действительно, я сделал. мы уже используем queue_run_max и queue_load_max, и я не хочу ставить в очередь ** все **. steev 9 лет назад 0