Назад | Перейти на главную страницу

Apache: «Сервер кажется занятым», но много незанятых процессов

Замечу, что я не сисадмин. Вы очень скоро это поймете. :)

В двух словах: Apache делает передышку во время больших нагрузок, и все процессы простаивают. Это сервер опроса, который используется приложениями. Опросы проводятся много разных конечных точек. Время от времени (каждые 4-5 минут), если я смотрю вверху, процессы HTTPD одновременно простаивают, задерживая трафик на 10 секунд или около того. Затем он восстанавливается. Задержка проблематична.

Журналы Apache

Иногда, но не всегда (в основном после перезагрузки) я получаю эти сообщения в error_log. В большинстве случаев, когда это происходит, я ничего не вижу в error_log.

[Mon Jun 30 17:55:17 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 31 idle, and 98 total children
[Mon Jun 30 17:55:18 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 16 children, there are 14 idle, and 98 total children
[Mon Jun 30 17:55:44 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 74 idle, and 99 total children
[Mon Jun 30 17:55:54 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 61 idle, and 99 total children
[Mon Jun 30 17:56:00 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 0 idle, and 97 total children
[Mon Jun 30 17:56:02 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 16 children, there are 36 idle, and 99 total children
[Mon Jun 30 17:56:03 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 32 children, there are 39 idle, and 99 total children
[Mon Jun 30 18:08:17 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 18 idle, and 99 total children
[Mon Jun 30 18:08:18 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 16 children, there are 63 idle, and 98 total children
[Mon Jun 30 18:08:19 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 32 children, there are 74 idle, and 97 total children

Конфигурация Apache (старая конфигурация закомментирована)

просто показывать элементы конфигурации, которые, как я подозреваю, актуальны

#Timeout 60
Timeout 20
KeepAlive on
MaxKeepAliveRequests 1000
KeepAliveTimeout 2

IfModule prefork.c
        StartServers            85
        MinSpareServers         85
        MaxSpareServers         100
        ServerLimit             100
        MaxClients              100
        #StartServers       60
        #MinSpareServers    60
        #MaxSpareServers    85
        #ServerLimit        85
        #MaxClients         85
        MaxRequestsPerChild 1000
/IfModule

Обратите внимание, что нет разницы в поведении старых и новых конфигураций.

Окружающая среда EC2, c1.medium, mod_perl, постоянные соединения с базой данных, отдельный сервер RDS, ошибки не отображаются в журналах ошибок MySQL и ошибки не отображаются в журналах Apache

Кстати, я видел предложения по установке mod-status, но я не понял, как это сделать, и не знаю, что искать, если я это сделаю.

Тайна раскрыта.

В случае, если это произойдет с кем-либо еще: сетевое соединение (внутри VPC через интерфейс LAN) между Apache и сервером базы данных было перегружено. Обновление сервера базы данных до более крупного экземпляра решило проблему (на данный момент).

Справочная информация: Amazon каждые 5 минут делает снимки вашей базы данных для функции восстановления на определенный момент времени. Для этого он загружает двоичный журнал в ваш экземпляр RDS.

Каждые 5 минут двоичный журнал передается (предположительно в другой EBS), и в моем случае эта передача перегружала интерфейс LAN. Apache зависает, ожидая сетевого подключения каждые пять минут, и соединения накапливаются, а некоторые в конечном итоге прерываются.

Я бы установил MaxClients примерно до 200 ...

Кроме того, мне любопытно, почему минимальные и максимальные резервные серверы так высоки. Я бы, вероятно, установил MinSpareServers примерно на 20, а MaxSpareServers примерно на 30. Это количество практически незанятых процессов, которые остаются, apache будет создавать больше по мере необходимости до настройки MaxClients и уменьшать количество резервных процессов по мере необходимости. уменьшается.

Наконец, почему вы изначально создаете так много начальных серверов. Я бы начал с чего-то вроде установки StartServers примерно на 50.

У меня была такая же проблема, оказалось, что это было вызвано уменьшенным масштабом экземпляра RDS. ЦП и память всегда были ниже 15%, поэтому я не стал его обновлять, пока не прочитал ответ OP.

Изменение экземпляра RDS с t2.micro на t2.medium решило мою проблему.

Было действительно сложно устранить неполадки, потому что это не так очевидно из статистики экземпляра, единственное, что я мог заметить, - это небольшие пики на графиках пропускной способности ввода и вывода.