Я добавил этот код в файл sendmail.mc:
dnl # Uncomment and edit the following line if your outgoing mail needs to
dnl # be sent out through an external mail server:
dnl #
define(`SMART_HOST',`in.hes.trendmicro.eu')dnl
dnl #
Я сделал преобразование m4 для создания файла sendmail.cf, добавлен следующий код:
DSin.hes.trendmicro.eu
Я получаю следующую ошибку в примере / var / mail /:
<example1@example.com>... Host unknown (Name server:example.com: host not found)
Я не знаю, что я сделал здесь неправильно, новичок в sendmail.
Я проверил некоторые параметры и увидел, что запущено много процессов httpd. ps axf | grep httpd | wc
показывает что-то вроде этого:
387 2344 18354
В то время как нагрузка не очень впечатляющая. top
выглядит так:
Очень небольшое количество процессов httpd время от времени запускается снова, но их общее количество почти постоянно увеличивается. Если я запустил службу httpd reload
, количество процессов упадет до 0 и снова начнет увеличиваться в течение следующих нескольких минут или часов. Через некоторое время журнал Apache сообщает мне:
[error] server reached MaxClients setting, consider raising the MaxClients setting
Я сделал это и также изменил другие параметры конфигурации, но это не помогло. Независимо от того, какое значение установлено в MaxClients
и ServerLimit
, Apache не прекратит запускать новые процессы httpd до этих пределов. После этого, веб-сайт больше не доступен.
По данным AWStats, не было увеличения количества обращений к странице. Более того, в приложении PHP не было ни одного изменения. За исключением того, что все запросы блокируются через 30 минут, сайт работает быстро, как обычно. В качестве грязного и временного обходного пути Cron продолжает перезагружать Apache каждые полчаса.
Настройки Prefork / Worker за последние 3 года были следующими:
<IfModule prefork.c>
StartServers 4
MinSpareServers 5
MaxSpareServers 10
ServerLimit 128
MaxClients 128
MaxRequestsPerChild 600
</IfModule>
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Я поднял их до:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 10
ServerLimit 640
MaxClients 640
MaxRequestsPerChild 1000
</IfModule>
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
После этого изменения Apache / HTTP стал недоступен примерно через 1 час.
Как это может произойти внезапно и какие варианты у меня есть, чтобы выяснить, откуда происходит это странное поведение?
Кулак, увеличение параметров предвключений только ухудшит вашу ситуацию. Поэтому восстановите предыдущую конфигурацию.
Чтобы исключить любую проблему с преформой/недостаточной конфигурацией, попробуйте ее отключить. Ситуация существенно меняется? Если да, то вы найдете свою проблему.
Если нет, то проблема связана с внешними факторами: например, может быть какой-то бот/скрипт нацелился на ваш сайт, открыв множество соединений (с относительным httpd-процессом). Если это так, то вы должны увидеть это из лог-файлов Apache.
Если этого недостаточно, то вы можете включить модуль mod_status
для отображения подробной статистики. Затем, для доступа к этой статистике, необходимо выдать apachectl fullstatus
. Смотрите здесь и здесь для получения более подробной информации.