Apache: "Сервер, кажется, занят", но множество бездействующих процессов

Должен заметить, что я не сисадмин. Вы поймете это очень скоро.:)

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

  • Сервер обслуживает много трафика. Это опросы приложений через HTTPS, а не веб-страницы (хотя я сомневаюсь, что Apache знает разницу)
  • Вышеуказанные паузы приводят к тому, что трафик становится односторонним: через некоторое время я получаю ВСЕ ГРУППЫ ДВИЖЕНИЯ, затем затишье, затем снова ВСЕ ГРУППЫ ДВИЖЕНИЯ
  • Каждый опрос требует небольшого падения базы данных

Логи Apache

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

[Пн Июн 30 17:55:17 2014] [info] сервер кажется занятым (может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 8 детей, 31 простаивает и 98 детей в целом [Пн Июн 30 17:55:18 2014] [info] сервер кажется занятым (вам может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 16 детей, 14 бездействующих и всего 98 детей [Пн Июн 30 17:55:44 2014] [info] сервер кажется занятым (вам может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 8 детей, 74 простаивают и всего 99 детей [Пн Июн 30 17:55:54 2014] [info] сервер кажется занятым (может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 8 детей, 61 простаивает и всего 99 детей [Пн Июн 30 17:56:00 2014] [info] сервер кажется занятым, (вы может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 8 детей, 0 бездействующих и всего 97 детей [Пн Июн 30 17:56:02 2014] [info] сервер кажется занятым (может потребоваться увеличить StartServers или мин / MaxSpareServers), порождает 16 дочерних, 36 простаивают и всего 99 дочерних [Mon Jun 30 17:56:03 2014] [info] сервер кажется занятым (может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 32 детей, их 39, и всего 99 детей [Пн Июн 30 18:08:17 2014] [info] сервер кажется занятым (может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 8 детей, их 18 простоя и всего 99 детей [Пн Июн 30 18:08:18 2014] [info] сервер кажется занятым (может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 16 детей, 63 простаивают и 98 всего children
[Пн, 30 июня, 18:08:19 2014] [info] сервер кажется занятым (может потребоваться увеличить StartServers или Min/MaxSpareServers), порождая 32 дочерних, 74 простаивают и 97 дочерних всего 

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

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

# Время 60
Тайм-аут 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

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

3 ответа

Решение

Тайна разгадана.

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

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

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

Я бы довел настройку MaxClients до 200...

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

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

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

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

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

Другие вопросы по тегам