У меня на сервере работает apache2.
Сегодня было много http-запросов (но не редкость), и почему-то средняя нагрузка выросла до более 200 (!!!). Очевидно, веб-сайт был недоступен (недоступен).
Остановка apache привела бы к относительно быстрому падению нагрузки, но как только я запустил его снова, загрузка превысила 100 за секунды.
Что странно, так это то, что рабочая нагрузка ЦП и MEM была нормальной или даже низкой, как если бы система не «понимала», что нужно обрабатывать множество процессов.
Что еще более странно, так это то, что загрузка процессора внезапно упала до 100% на всех ядрах:
После этого загрузка вернулась в нормальное состояние (<1) в течение нескольких минут, и веб-сайт внезапно снова стал доступен.
Я действительно не могу объяснить себе такое поведение. Может ли кто-нибудь помочь мне предотвратить это в будущем?
Две дикие догадки:
1) Корень документа обслуживается через NFS или какую-либо другую сетевую файловую систему или кластерную файловую систему, которая отвечает медленно или не отвечает вообще.
2) Ваш Apache (и скрипты PHP или что-то еще) ждут базы данных или другого внешнего ресурса.
Моим первым предположением было бы 1) так как все вернулось к норме за очень короткий всплеск. В этом случае проверьте свою сеть или файловый сервер.
Prefork MPM до смешного не подходит для высокопроизводительного производственного развертывания. Запуск дополнительных процессов обходится очень дорого, и каждый процесс (поток) может легко занимать до 30 МБ.
Вместо этого рассмотрите возможность использования рабочего MPM или (при запуске современного apache) Event MPM.
Можно тривиально увеличить количество потоков в 10 раз при том же объеме памяти.
В дополнение к первому предположению @Janne Pikkarainen,
Также проверьте сообщения журнала ошибок, особенно сообщение по умолчанию, если у вас есть несколько файлов журнала на виртуальных хостах, о (internal dummy connection)
подписи. подробности здесь
В некоторых версиях apache2 тезисы сигнализируют о том, что внутренние соединения apache настроены для принудительной корректной перезагрузки или сборки мусора. Они отправляются всем живым потомкам и управляются вашим виртуальным хостом по умолчанию (первым из apache2 -S). Если ваш виртуальный хост по умолчанию является ресурсоемким, этот внезапный пик может также привести к таким плохим последствиям, а не только к мусору журнала.
если ваша NFS или база данных - или любая другая блокирующая вещь - поражена тезисами, простое решение - иметь настоящий фиктивный виртуальный хост по умолчанию («он работает»).
Взгляните на свою конфигурацию Apache и обратите внимание на следующие директивы:
Конфигурация по умолчанию для них может не подходить. Так было со мной и привело к тому, что Apache использовал много памяти, когда сервер пострадал больше, чем обычно. Моя проблема была решена путем уменьшения их значений.
Убедитесь, что вы понимаете конфигурацию вашего производственного Apache - значения по умолчанию доступны для тестирования.