Однажды наше веб-приложение Java достигает 100% использования ЦП. Перезапуск решил инцидент, но не проблему, потому что через несколько часов проблема вернулась. Мы подозревали бесконечный цикл, появившийся в новой версии, но мы не вносили никаких изменений в код или на сервер.
Нам удалось найти проблему, сделав несколько дампов потоков с помощью команды kill -QUIT, а также просмотрев и сравнив детали каждого потока. Мы обнаружили, что один стек вызовов потока появляется во всех дампах потоков. После анализа было условие цикла while, которое никогда не становится ложным для некоторых данных, которые регулярно обновлялись в базе данных.
Анализ нескольких дампов потоков веб-приложения действительно утомителен.
Итак, знаете ли вы какой-либо лучший способ или инструменты для поиска такой проблемы в производственной среде?