Странная перегрузка на веб-сервере apache2
Недавно я унаследовал настройки веб-сервера от другого разработчика. Это в основном следующее:
2 веб-сервера под управлением Apache 2 2 балансировщики нагрузки под управлением серверов баз данных nginx 2 под управлением MySQL
Примерно каждую неделю веб-серверы Apache перестают отвечать на запросы, и балансировщик нагрузки в итоге возвращает 504 тайм-аута шлюза. Я вошел на веб-сервер и проверил работоспособность: 18:40:49 up 5 days, 20:15, 1 user, load average: 122.37, 119.80, 107.57
что чрезвычайно высоко по сравнению с числом процессов, доступных для экземпляра, который равен 8.
Чтобы как можно быстрее вернуться к работе, я перезапустил веб-серверы, и все вернулось на круги своя: 18:54:19 up 5 min, 1 user, load average: 0.11, 0.22, 0.10
Я не прошу определенных ответов, так как я должен искать источник проблемы, но я хотел бы получить несколько подсказок и предложений по этому вопросу:
- Как вы думаете, почему это может происходить?
- Каким образом я могу подробнее изучить эту проблему, чтобы определить источник проблемы? Мне нужно несколько указателей на то, где и что искать.
Спасибо за помощь.
1 ответ
Высокая нагрузка, которая устраняется при перезапуске, может быть признаком некоторой утечки. Если использование памяти увеличивается либо из-за утечки памяти, либо просто из-за того, что платформа приложения поддерживает некоторые структуры данных, которые со временем растут, то сервер может в конечном итоге сильно поменяться местами.
Это, очевидно, зависит от многих факторов, но я видел, что веб-серверы слишком сильно ограничивают память, проявляя симптомы, как вы описали.
Другая возможность состоит в том, что приложение порождает фоновые потоки, которые по какой-то причине продолжают работать и тратить процессорное время или другие ресурсы.
Я настоятельно рекомендую вам спросить у предыдущего владельца подсказки относительно того, что может потреблять ресурсы (как память, так и процессор). Симптомы, которые вы описываете, могут также возникнуть, если сервер был скомпрометирован, но, не зная, как сервер должен себя вести, может быть очень трудно определить разницу. И даже если компромисс не является частью объяснения, вам все равно нужно понять приложение для устранения проблемы.