Назад |
Перейти на главную страницу
Ограничение использования ЦП / ввода-вывода для служб Linux
Я видел, как EXIM вылетал из системы, когда загружалось 10000 писем от пользователя / скрипта. Мне было интересно, есть ли способ ограничить его использование в системе и защитить систему или службу от злоупотреблений.
Есть несколько вещей, которые exim может сделать для уменьшения нагрузки.
- Обнаружение высокой нагрузки и постановка exim в очередь большого количества входящих сообщений, генерируемых сценарием, вместо попытки доставить их. Для этого актуальны следующие варианты:
queue_only_load no immediate delivery if load is high
queue_only_load_latch don’t re-evaluate load for each message
queue_only_override allow command line to override
- Скорее всего, вы привыкли к grepping или exigrep для извлечения информации из файла /var/log/exim/main.log (или как там он называется для вашего дистрибутива). Exim также по умолчанию поддерживает копию этого журнала для каждого сообщения, группируя журналы электронной почты каждого сообщения в один файл, удаляя его при доставке сообщения. Вы можете просмотреть их для одного сообщения с помощью 'exim -Mvl QUEUEID'. Или просто выключите:
В сильно загруженной системе может быть желательно отключить использование журналов для каждого сообщения, чтобы уменьшить дисковый ввод-вывод. Это можно сделать, установив для параметра message_logs значение false.
- Протестируйте использование системного журнала для входа на удаленный сервер, а не локально. Это немного уменьшит дисковый ввод-вывод, хотя я думаю, что он будет бледным по сравнению с вводом-выводом, вызванным большим объемом создания электронной почты и т. Д.
- Когда вы закончите вводить электронные письма на почтовый сервер, нагрузка упадет. В этот момент запустите кучу обработчиков очереди. Exim известен тем, что медленно доставляет сообщения из очереди, но если у вас низкая нагрузка, нет ничего плохого в запуске достаточного количества процессов доставки для запуска очереди и доставки почты быстрее ... до тех пор, пока ваша нагрузка не станет тормозящей ( обычно указывает на то, что использование дискового ввода-вывода достигает насыщения). Попробуйте создать 10 обработчиков очереди за раз. Я подозреваю, что вы могли бы сделать 100 или 150 без чрезмерной нагрузки. 'iostat -x -d 1' - ваш помощник, чтобы убедиться, что дисковый ввод-вывод является или не является узким местом.
- Подтвердите прямую и обратную проверку DNS для вашего сервера исходящей почты. Убедитесь, что IP-адрес, который видят серверы-получатели, такой же, как вы думаете, и он также должен быть разрешаемым в прямом и обратном направлении, иначе у вас будут замедления, поскольку получатели будут выполнять поиск DNS на вашем IP (для своих журналов и т. Д.).
Я предлагаю вам проверить инструменты «nice» и «ionice»: один, чтобы уменьшить влияние требовательного процесса на использование ЦП, и другой, чтобы уменьшить влияние на задачи ввода-вывода. (Планировщик CFQ необходимо использовать, если вы не хотите использовать ionice для регулирования пропускной способности диска)
В качестве альтернативы вы можете проверить подсистему cgroups ядра. Cgroups поддерживают создание жестких и программных ограничений памяти, а также регулирование использования диска. (Планировщик CFQ должен использоваться для регулирования использования диска)
Возможно, вы сможете делать то, что вам нужно, с Лимиты PAM (/etc/security/limits.conf
) или ulimit.