Я заметил следующую аннотацию в тетради:
Лучший способ очистить полную очередь - использовать командную строку примерно так:
/usr/sbin/sendmail -OQueueSortOrder=filename -q10m -d99.100
/usr/sbin/sendmail -OQueueSortOrder=random -q10m -d99.100
← V8.12 и новее/usr/sbin/sendmail -OQueueSortOrder=none -q10m -d99.100
← V8.13 и новееЗдесь -d99.100 указывает sendmail запускаться на переднем плане (чтобы вы могли легко убить его, когда закончите). -Q10m вызывает запуск демона обработки очереди один раз каждые 10 минут (как и раньше). Это необходимо, потому что может показаться, что один демон зависает при доставке почты на медленный хост. Запуская параллельные демоны, вы избегаете этой ловушки.
Позже в той же главе говорится о том, что установка интервала - плохая идея:
Через час сервис восстанавливается. Во-первых, по умолчанию:
/usr/sbin/sendmail -q10m
заставляет разветвленную копию sendmail начать обработку очереди. Однако на этот раз обработка не будет быстрой. Когда очередь заполняется до 30 000 или более сообщений, время, необходимое для предварительного чтения очереди (для открытия и чтения каждого сообщения), увеличивается до более 20 минут. [180] И эти 20 минут предназначены только для предварительного чтения. В течение этих 20 минут почта отправляться не будет.После этого дела обстоят еще хуже. Десять минут спустя разветвляется второй демон sendmail, который тоже начинает предварительное чтение очереди. Теперь вместо того, чтобы один демон sendmail открывал и читал все сообщения в очереди, у нас есть два демона sendmail, выполняющих одно и то же параллельно.
Вопреки тому, что вы думаете, вдвое большее количество операций ввода-вывода на диске - это не вдвое быстрее. Диски - это конечные устройства, которые выполняют ограниченное количество перемещений головки диска [181] в секунду и могут передавать только фиксированное количество байтов в секунду. Поскольку два демона sendmail на 10 минут не синхронизируются друг с другом, каждый из них читает и обрабатывает отдельные файлы. В зависимости от размера вашего дискового кеша в памяти ни один из них, скорее всего, не сможет воспользоваться преимуществами такого кэширования. Короче говоря, два демона sendmail, обрабатывающие глубокую очередь параллельно, хуже, чем один демон sendmail, обрабатывающий только ту же очередь.
И если этого было недостаточно, еще через 10 минут третий демон sendmail начал обрабатывать очередь.
К этому моменту первый демон sendmail, возможно, завершил предварительное чтение очереди и, возможно, действительно начал отправлять сообщения. Но даже если это так, три демона sendmail теперь обрабатывают эту единственную глубокую очередь, и происходит любопытная вещь. Поскольку размер диска, на котором находится очередь, ограничен, добавление третьего демона sendmail замедляет работу первых двух. Второй, вместо 20 минут на предварительное чтение очереди, теперь займет 30 минут.
Это означает, что каждые 10 минут к смеси добавляется еще один демон обработки очереди sendmail. По мере добавления каждого из них замедляются все остальные, которые уже работают, и вскоре нагрузка на машину начинает расти, а скорость доставки сообщений падает с угрожающей скоростью. Фактически, когда такое поведение затрагивает сайт очень большого объема, демон обработки очереди sendmail может запуститься и, похоже, никогда не завершить работу.
Мне кажется, что я читаю в документации две совершенно разные вещи:
Что нужно предпринять для больших очередей?
То, что вы видите, является типичным сендмалом: «исправить только одну проблему, игнорировать другие возможные проблемы» - это вызвано десятилетиями разработки «Я способствую исправлению СВОЕЙ проблемы».
Первый совет имеет дело с "медленно обрабатываемыми" элементами в довольно большой (но не огромной) очереди.
Второй совет имеет дело с ОГРОМНОЙ обработкой очереди, которая делает настройку запуска очереди sendmail по умолчанию невероятно медленный и голодный по памяти.
Первый совет можно улучшить, используя
* MinQueueAge
- время между попытки доставки конкретного сообщения.
* MaxQueueRunSize
- максимальное количество сообщений, обрабатываемых обработчиком очереди.
Старый RFC рекомендует 30-метровую задержку между попытками доставки. Другой MTA может использовать разные задержки между попытками доставки в зависимости от времени, проведенного в очереди.
BTW Обработка очередей MSA и основной очереди (ей) ДОЛЖЕН оптимизировать отдельно.
ПО МОЕМУ МНЕНИЮ: Большинство небольших сайтов может справиться с ОГРОМНОЙ очередью вручную. Чаще всего это вызывается «раз в несколько лет» из-за спама из-за взлома / уязвимости. Нет смысла оптимизировать sendmail, чтобы отправлять его быстрее. Видеть 18 ГБ в отчете об очереди MSA.