Помогите найти причину проблем с apache

Приветствую. Есть у меня проект, доставшийся мне в «наследство» — точнее я сам вызвался и полез в кузов)
У проекта довольно мощный выделенный сервер: Xeon E3-1240 3.7GHz / 16Gb RAM / 2x2000Gb SATA / IPMI with IP-KVM
Проект — это php+mysql.
Но постоянно возникают проблемы с apache — он падает или тормозит. На сервере установлен Monit.
Пользователей не сказать чтобы много — около сотни более-менее активных. Он-лайн на пике около 20 человек (но некоторые возможно в несколько окон сидят) и от каждого пользователя постоянные аякс-запросы (знаю что нужен скорее comet-сервер по-хорошему, но пока руки не дошли).

И периодически падает apache, яндекс метрика сообщает о недоступности сайта. Обычно длится не более нескольких секунд — потом apache восстанавливается и работает нормально, хоть и медленно, а потом может опять прилечь. Хотя сам apache при этом не то чтобы падает — он просто тормозит. Перезапуск apache не помогает — через минуту ситуация начинает повторяться.

Monit присылает 2 типа уведомления в таких случаях:

Connection failed Service apache
Date: Tue, 12 Nov 2013 11:00:52
Action: alert
Host: MYHOST
Description: failed protocol test [HTTP] at INET[MYPROJECT:80] via TCP — HTTP: Error receiving data — Resource temporarily unavailable

Your faithful employee,
Monit

или

Resource limit matched Service apache
Date: Tue, 12 Nov 2013 01:56:42
Action: alert
Host: MYHOST
Description: loadavg(5min) of 44.5 matches resource limit [loadavg(5min)>20.0]

Your faithful employee,
Monit

Второй тип сообщения бывает крайне редко — в пиковые часы присутствия пользователей. Да и более менее понятно что произошло

А первое сообщение — для меня скорее загадка. Особенно учитывая что при этом не было каких-то особых аномальных показателей загрузки CPU и памяти со стороны apache, скорее наоборот потребление ресурсов апачем проседало к нулевым значениям ближе.

Настройки apache:
Timeout 500

KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 15

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      50
    MaxClients          450
    MaxRequestsPerChild   100
</IfModule>

<IfModule mpm_worker_module>
    StartServers          5
    MinSpareThreads      5
    MaxSpareThreads      75 
    ThreadLimit          100
    ThreadsPerChild      35
    MaxClients          450
    MaxRequestsPerChild   100
</IfModule>

<IfModule mpm_event_module>
    StartServers          5
    MinSpareThreads      5
    MaxSpareThreads      75 
    ThreadLimit          100
    ThreadsPerChild      35
    MaxClients          450
    MaxRequestsPerChild   100
</IfModule>


А error.log ничего в такие промежутки не вижу. В 11.02 примерно были проблемы и вот что в логе по этому поводу:

[Mon Nov 11 10:34:06 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/lib/apache2/suexec)
[Mon Nov 11 10:34:06 2013] [warn] RSA server certificate CommonName (CN) `MYHOST' does NOT match server name!?
[Mon Nov 11 10:34:06 2013] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u5 mod_ssl/2.2.22 OpenSSL/1.0.1e configured — resuming normal operations
[Mon Nov 11 11:25:26 2013] [notice] caught SIGTERM, shutting down
[Mon Nov 11 11:25:26 2013] [warn] RSA server certificate CommonName (CN) `MYHOST' does NOT match server name!?
[Mon Nov 11 11:25:26 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/lib/apache2/suexec)


Вот настройки monit по мониторингу аpache:
check process apache with pidfile /var/run/apache2.pid
   start program = "/etc/init.d/apache2 start"
   stop program  = "/etc/init.d/apache2 stop"
   if failed host MYPROJECT port 80 protocol http then alert
   if cpu > 60% for 2 cycles then alert
   if cpu > 85% for 5 cycles then restart
   if totalmem > 2048 MB for 5 cycles then alert
   if children > 250 then alert
   if loadavg(5min) greater than 20 for 10 cycles then alert
   if 3 restarts within 5 cycles then timeout


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

Спасибо.
  • Вопрос задан
  • 13315 просмотров
Решения вопроса 1
merlin-vrn
@merlin-vrn
Это не может быть ротация логов в этот момент? Видно, что апач перезапускался.

Вообще, я бы ещё посмотрел dmesg (на предмет segfaultов и тому подобного) и общесистемные логи, там, messages, лог cron и так далее. Что вообще в системе происходило.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
phpdude
@phpdude

Надо бы нагрузку помониторить глазами, возможно вы упираетесь в какие то системные лимиты, раз много ajax, возможно какие то запросы блокруют сеть, както неоптимально используют сервер, блокируют базу (как частый случай работы с MyISAM storage backend в mysql), не давая следующим запросам работать, апач может падать в таких ситуациях - видел такое в свое время.

я бы: 1. помониторил нагрузку, сделал какие то выводы о возможных блокировках ресурсов. ошибка #1 похожа на блокировку возможности принимать новые соединения из-за лимита (системного, либо на уровне апача) соединений (возможно зависших от блокировки базы). 2. перешел на nginx + php-fpm в любом случае, быстрее связка и ресурсов жрет меньше, более тонко конфигурируемая. Ну это ИМХО.

Ответ написан
Комментировать
@lubezniy
RAID-массив (если используется) в норме?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы