Высокая загрузка ЦП, приводящая к сбою сервера

Не хватает идей для изучения. Прежде всего - позвольте мне предупредить вас - я программист, а не систематик:)

Здесь ситуация.

Выделенный сервер (LAMP) работает с достаточным количеством сайтов. Сервер MySQL находится на отдельной коробке.

В последние пару недель производительность неуклонно снижалась до такой степени, что я уже не могу даже удаленно войти в коробку.

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

PHP запускается как CGI.

Большинство сайтов, для запуска которых требуется время, используют платформу CakePHP.

Перезагрузите сервер, мы снова в течение нескольких минут...

Пересекла ошибку, в которой сказано, что / var / tmp / переполнен и не может записывать сеансы. Тем не менее, было еще место? Недостаток inodes возможно? В настоящее время идет процесс того, чтобы кто-нибудь спустился к коробке и очистил тмп.

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

Любые другие идеи, которые я мог бы хотеть изучить? Я наблюдал за сервером sql, чтобы узнать, возвращает ли он огромный набор данных в любом из запросов, и там нет ничего примечательного....

Сейчас только 11:21, и мне уже нужно выпить:)

2 ответа

Я предполагаю, что это проблема с памятью.

  1. Апач кушает много оперативки.

  2. PHP также имеет много утечек памяти. Вы должны настроить его так, чтобы он перезапускал свои рабочие потоки после обработки небольшого количества запросов (100 - хорошее число). Посмотрите в /etc/init.d/php-cgi (или аналогичную) строку "PHP_FCGI_MAX_REQUESTS=20" ... что предел. Также установите разумное ограничение на количество детей, например, "PHP_FCGI_CHILDREN=15". Я бы также предложил вам использовать php-fpm, если это возможно, это намного более стабильно и имеет меньше утечек памяти.

СДЕЛАТЬ:

  1. Попробуйте найти убитые процессы в вашем системном журнале (/ var / log / syslog или / var / log / messages в зависимости от дистрибутива). Там может быть такой намек.
  2. Чтобы отследить проблему, попробуйте использовать "поверх" (монитор процесса, как top, но некоторые другие функции) и нажмите "p", чтобы накапливать всю статистику по именам процессов. Посмотрите на то, что съедает RSIZE.

Вам действительно нужно смотреть изнутри коробки, а не снаружи, поэтому посмотрите, какой ресурс потребляется.

Я думаю, что пул процессов Apache исчерпан (поэтому никто не может подключиться) или физическая память исчерпана (поэтому производительность падает с обрыва).

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