Сервер Apache2 перестает отвечать

Сервер Apache2 перестает отвечать

Я ищу предложения о том, где мне следует копать глубже.

Вскоре сервер Apache2 перестает обслуживать запросы через 2-15 часов после запуска. В результате мне приходится делать это service apache2 restartполдня.

Длинная версия:

  1. Я запускаю несколько веб-сайтов (Apache 2.2.22, построен 12 июля 2013 г.) на выделенном сервере (Ubuntu 13.04).
  2. Сервер Apache2 работал нормально более полугода, а теперь внезапно перестал обрабатывать запросы на всех сайтах (всего их около 5), пока процесс Apache не будет перезапущен.
  3. Мне не удалось найти никаких аномальных записей в журналах /var/log/apache, касающихся этой проблемы.
  4. service apache2 statusсообщает, что процесс запущен

Буду рад услышать ваши предложения и узнать, что мне делать в моей ситуации.

ОБНОВЛЯТЬ:

Бег netstat -an | grep 80:

tcp6       0      0 :::80                   :::*                    LISTEN
tcp6     325      0 SERV_IP:80       IP_A:35514     CLOSE_WAIT
tcp6     332      0 SERV_IP:80       IP_B:34198     CLOSE_WAIT
tcp6     379      0 SERV_IP:80       IP_C:57859     CLOSE_WAIT
tcp6       0      0 SERV_IP:80       IP_A:35060     CLOSE_WAIT
tcp6     360      0 SERV_IP:80       IP_A:38481     CLOSE_WAIT
tcp6     466      0 SERV_IP:80       IP_B:56324     CLOSE_WAIT
tcp6     361      0 SERV_IP:80       IP_A:53466     CLOSE_WAIT
tcp6       1      0 SERV_IP:80       IP_A:38102     CLOSE_WAIT
tcp6     196      0 SERV_IP:80       IP_E:58125     ESTABLISHED

и еще больше подобных записей, около 150.

ps aux | grep apache:

root      2968  0.0  0.0 452240 21116 ?        Ss   16:08   0:01 /usr/sbin/apache2 -k start
www-data  5217  0.0  0.0 463584 23820 ?        S    17:04   0:03 /usr/sbin/apache2 -k start

Последующих строк (www-data) около 120, поэтому я предполагаю, что это 120 процессов Apache?

Использование strafeкорневого процесса apache2:

 sudo strace -f -p 2968
Process 2968 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 264394}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0

Использование одного из процессов www-data:

sudo strace -f -p 8554
Process 8554 attached - interrupt to quit
flock(40, LOCK_EX

Ого, мне кажется, что каким-то образом процессы Apache застревают, и как только максимальный лимит соединений превышен, он перестает создавать новые экземпляры. Но почему они застревают?

htop, iotop, jnettop не сообщают об аномалиях (перегрузки нет).

ОБНОВЛЕНИЕ 2: Сервер больше не падает в течение последних двух дней. Поэтому я не могу получить больше информации. Вместо этого я благодарен за вашу помощь и принимаю ответ. Как только будет больше информации, я оставлю ссылку на новый вопрос с более четким текстом. Спасибо

решение1

Независимо от того, что сообщает «service apache2 status», видите ли вы процессы Apache, когда выполняете команду ps aux?

Можете ли вы сделать netstat -n, когда возникает проблема? Возможно, у вас закончились ресурсы, например, дескрипторы файлов, или у вас слишком много открытых соединений.

Во время проблемы у вас высокая загрузка процессора? Может быть, система исчерпывает память и тормозит?

HTTP-сервер отвечает отказом в соединении или просто истекает время ожидания соединения?

В последнем случае я бы предложил выполнить strace -f -p [apachepid] и вы, возможно, узнаете, какой системный вызов блокирует запрос. В первом случае, вероятно, apache рухнул.

Используете ли вы прокси-сервер Tomcat или другой сервер приложений или обслуживаете простой статический HTML?

Вы настроили аутентификацию? Например, может быть, что-то пошло не так на уровне аутентификации.

ОБНОВЛЯТЬ:

Во второй трассе я вижу это flock(40,LOCK_EX Возможно, процессы пытаются получить где-то исключительную блокировку? Вы можете выполнить lsof -n -p 8554 (или любой другой pid, который пытается flock) и посмотреть, какой файл он пытается заблокировать (40 — это дескриптор файла). Вы также можете выполнить "ls /proc/8554/fd"

Связанный контент