Вывод в заголовке может быть неправильным, учитывая, что проблема близка к годичной давности, и только сейчас я смог получить некоторую информацию по этой проблеме. Это на сентос 5, работает на старом PIII с 384 МБ ОЗУ. Обратите внимание, что примерно год назад, когда я не помню, что именно изменилось, этот же сервер работал нормально. Возможно, это был более старый CentOS.

uname сообщает:«Linux localhost.localdomain 2.6.18-410.el5.centos.plus # 1 SMP Ср. 11 мая 21:46:57 EDT 2016 i686 i686 i386 GNU/Linux»

Проблема представляет собой случайные зависания, каждые несколько дней, иногда два раза в день. Замораживание не является реальным замораживанием, так как, если я пытаюсь подключиться к серверу через ssh, через несколько минут я получаю приглашение пользователя, а через очень долгое время отключаюсь по таймауту, поэтому я не получить, чтобы ввести пароль. Но в конце концов, если я оставлю его "замороженным" на день или два, он полностью закроется.

Единственное решение - перезагрузка, с кнопки.

Вчера я наконец-то получил подсказку от физического сервера о том, что светодиод жесткого диска был полностью освещен во время остановки (раньше я этого не замечал, так как я на самом деле не смотрел), поэтому я запустил IOTOP для мониторинга активности и оставил это бегущим в окне замазки.

Просто сейчас замерзло в какой-то момент. Вот скриншот.

Скриншот

Я вижу, что есть много httpd процессов, пара mysqld, и самый верхний из них - это jurnaling.

Я понятия не имею, как интерпретировать эти проценты в контексте зависания моего сервера.

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

Я знаю, что перезапуск apache каждые несколько часов продлевает время работы сервера. И если мой трафик возрастает (от очень коротких посещений в день), то сервер останавливается за считанные часы.

Какие-нибудь указатели в чем еще проверить? Или какую конфигурацию настроить?

Спасибо.

1 ответ1

0

Спустя много проб и ошибок, я нашел обходной путь, так как не смог найти причину этого. (Я имею в виду, что это случайный IP-адрес на мой сервер каждые 1-2 дня). Я использовал страницу состояния сервера htpd, а затем утилиту atop, чтобы увидеть, какие ресурсы были перегружены во время замораживания, и обнаружил, что это был диск.

Так много испытаний спустя, я придумал следующий сценарий. Во-первых, максимально допустимое количество дочерних процессов httpd, поскольку в моем случае обычные операции не порождают более 20 дочерних процессов. Одной этой проверки недостаточно, поскольку несколько раз происходило так, что после того, как сервер замерзал, потребовалось около 24 часов для подсчета процесса. Таким образом, приходит проверка iostat, которая выполняется 2 раза с интервалом 5+5 секунд, чтобы избежать локальных всплесков использования жесткого диска.

cnt=`ps -Af | grep httpd | grep -v rotatelogs | grep -v grep | wc -l`
now=`date +%Y-%m-%d_%H-%M`

if [ $cnt -ge 40 ]
then
  /usr/bin/wget -q -O /root/apache_status_$now http://<your server here>/server-status
  /sbin/service httpd restart
fi

# your hdd here
dsk=`/usr/bin/iostat -dx /dev/hda 5 2 | grep hda | tail -1 | awk '{print $12}'`

if (( $(echo "$dsk > 98" |bc -l) ))
then
  /bin/sleep 5
  dsk=`/usr/bin/iostat -dx /dev/hda 5 2 | grep hda | tail -1 | awk '{print $12}'`
  if (( $(echo "$dsk > 98" |bc -l) ))
  then
    /sbin/service httpd restart
  fi
fi

вышесказанное запускается в работе cron как

0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * /root/monitor-apache.sh

Надеюсь, это поможет кому-то справиться с подобными ситуациями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .