Высокая загрузка ЦП, приводящая к сбою сервера
Не хватает идей для изучения. Прежде всего - позвольте мне предупредить вас - я программист, а не систематик:)
Здесь ситуация.
Выделенный сервер (LAMP) работает с достаточным количеством сайтов. Сервер MySQL находится на отдельной коробке.
В последние пару недель производительность неуклонно снижалась до такой степени, что я уже не могу даже удаленно войти в коробку.
Что касается mod_status, то здесь достаточно ресурсов, которые занимают ресурсы процессора. Однако URL-адреса все разные... общего шаблона нет, поэтому я не могу ничего сузить до конкретного скрипта, который может застрять.
PHP запускается как CGI.
Большинство сайтов, для запуска которых требуется время, используют платформу CakePHP.
Перезагрузите сервер, мы снова в течение нескольких минут...
Пересекла ошибку, в которой сказано, что / var / tmp / переполнен и не может записывать сеансы. Тем не менее, было еще место? Недостаток inodes возможно? В настоящее время идет процесс того, чтобы кто-нибудь спустился к коробке и очистил тмп.
Может ли отсутствие возможности писать сессии вызывать зависание процессов php и в конечном итоге все забивать?
Любые другие идеи, которые я мог бы хотеть изучить? Я наблюдал за сервером sql, чтобы узнать, возвращает ли он огромный набор данных в любом из запросов, и там нет ничего примечательного....
Сейчас только 11:21, и мне уже нужно выпить:)
2 ответа
Я предполагаю, что это проблема с памятью.
Апач кушает много оперативки.
PHP также имеет много утечек памяти. Вы должны настроить его так, чтобы он перезапускал свои рабочие потоки после обработки небольшого количества запросов (100 - хорошее число). Посмотрите в /etc/init.d/php-cgi (или аналогичную) строку "PHP_FCGI_MAX_REQUESTS=20" ... что предел. Также установите разумное ограничение на количество детей, например, "PHP_FCGI_CHILDREN=15". Я бы также предложил вам использовать php-fpm, если это возможно, это намного более стабильно и имеет меньше утечек памяти.
СДЕЛАТЬ:
- Попробуйте найти убитые процессы в вашем системном журнале (/ var / log / syslog или / var / log / messages в зависимости от дистрибутива). Там может быть такой намек.
- Чтобы отследить проблему, попробуйте использовать "поверх" (монитор процесса, как top, но некоторые другие функции) и нажмите "p", чтобы накапливать всю статистику по именам процессов. Посмотрите на то, что съедает RSIZE.
Вам действительно нужно смотреть изнутри коробки, а не снаружи, поэтому посмотрите, какой ресурс потребляется.
Я думаю, что пул процессов Apache исчерпан (поэтому никто не может подключиться) или физическая память исчерпана (поэтому производительность падает с обрыва).