У меня есть сервер на AWS, который годами работал стабильно. Он работает под управлением Apache 2.2.22 на Ubuntu 12.04.5 LTS. Я регулярно запускаю обновления безопасности в начале месяца.
Недавно Apache перестал обслуживать запросы около полуночи, а иногда и в более позднее время ранним утром (2-4 утра по центральному времени). Для нас это период низкой активности, но у нас все еще есть стабильный поток запросов. Наша дневная активность намного выше и никогда не снижается в течение дня (по крайней мере, пока). Пока что он всегда появляется примерно через 10 минут или около того, а утром всегда возвращается к норме. Из-за времени возникновения проблемы я не подозреваю, что это связано с MaxClients, как предлагают несколько других потоков.
Я ничего не вижу ни в журналах ошибок apache (у нас около 10 виртуальных хостов), ни в dmesg, ни в syslog. Фактически, я сегодня утром прочитал каждый лог в / var / log. На момент выпуска я ничего не вижу.
Я смог поймать его, когда он не работает, из-за уведомления монитора сайта. За это время я могу убедиться, что apache не обслуживает запросы. Но я могу подключиться к серверу. У меня были подозрения на проблемы с сетью, но странно, что с одним портом все в порядке, а с другим - нет. Я смог подтвердить, что apache не будет обслуживать запросы от localhost на этом сервере. Так что вроде бы не железо.
Перезапуск службы apache восстанавливает работу сайтов, но только на несколько минут. Я следил за бревнами вживую, когда они упали, и все равно ничего. На момент возникновения проблемы ничего не отображается ни в одном журнале. Кажется, что перезагрузка всегда исправляет это (по крайней мере, еще 24 часа, а иногда и больше).
Служба поддержки Amazon не видит ничего плохого в сервере. Я подозреваю, что либо Apache не работает, либо перезапуск службы не является чистым. Или что-то происходит на уровне ядра / сети ОС. И, опять же, это всегда происходит при низкой загрузке процессора. С памятью все в порядке. Ни одного из «обычных подозреваемых» не происходит. Он просто молча перестает работать.
Учитывая отсутствие информации с сервера, я понятия не имею, что еще искать. Я склоняюсь к перестройке сервера на следующей неделе, но очень хотел бы разобраться в этом.
Может быть, есть еще кое-что, на что мне следует обратить внимание во время решения проблемы. Кроме того, если есть какие-либо журналы, которые я «появляюсь», чтобы получить дополнительную информацию, дайте мне знать. В настоящее время у меня нет полезных журналов, которые я могу опубликовать. Мне все это кажется безумным, потому что я привык к тому, что сбои каким-то образом фиксируются, особенно если это apache или ядро (мы давние друзья).
Я бы посоветовал в следующий раз, когда вы запустите его, запустить strace, чтобы после его смерти вы могли выяснить, какие вызовы происходили последними, прежде чем он вышел из строя. Вы можете использовать следующую команду после ее запуска, чтобы убедиться, что вы подключились к главному процессу и всем его дочерним процессам, а также к любым новым, которые разветвляются.
pidlist=''; for pid in `ps ax | grep httpd | awk '{print $1}'`; do pidlist="$pidlist -p $pid"; done; strace -tt -F -f $pidlist 2>&1 |tee /root/apache_strace.out
Я не знаю, если в вашем дистрибутиве процесс Apache называется httpd или что-то еще (например, apache или apache2), но если это не httpd, то замените правильное имя в приведенной выше команде.