Первоначально опубликовано при сбое сервера , где предполагалось, что этот вопрос лучше задать здесь.
Мы используем JBoss для запуска двух наших WAR. Одним из них является наше веб-приложение, другим является наш веб-сервис. Веб-приложение обращается к базе данных на другом компьютере и делает запросы к веб-службе. Веб-служба отправляет запросы JMS на другие машины, объединяет данные и возвращает их.
У нашего крупнейшего клиента примерно один раз в месяц процесс JBoss Java занимает 100% всех процессоров. Машина под управлением JBoss имеет 8 процессоров. В это время наше веб-приложение все еще доступно, однако загрузка страниц занимает около 3 минут. Перезапуск JBoss восстанавливает все до нормального состояния.
С машиной базы данных и всеми остальными машинами все в порядке, затрагивается только машина, на которой работает JBoss. Использование памяти нормальное. Использование сети нормальное. В журналах JBoss нет подозрительных сообщений об ошибках.
Я настроил тестовую среду как можно ближе к производственной среде клиента, и я провел нагрузочное тестирование с вдвое большим числом одновременных пользователей. Я не получил свою тестовую среду для воспроизведения проблемы.
Куда мы пойдем отсюда? Как мы можем сузить проблему?
В настоящее время единственный план, который у нас есть, - это дождаться, пока проблема возникнет самостоятельно, а затем выполнить некоторую отладку, чтобы определить причину. До сих пор люди только что перезапустили JBoss, когда возникла проблема, чтобы минимизировать время простоя. В следующий раз, когда это случится, они заставят разработчика взглянуть. Вопрос в следующем, что может быть сделано для определения причины?
Мы могли бы установить отдельный экземпляр JBoss в той же коробке и установить веб-приложение отдельно от веб-службы. Таким образом, когда возникнет следующая проблема, мы узнаем, в какой WAR возникла проблема (при условии, что это наш код). Это не сильно сужает это все же.
Должен ли я включить JMX remote? Таким образом, в следующий раз, когда возникнет проблема, я могу подключиться к VisualVM и посмотреть, какие потоки загружают процессор и какого черта они делают. Однако есть ли существенный недостаток при включении JMX remote в производственной среде?
Есть ли другой способ узнать, какие потоки потребляют ресурсы процессора, и получить трассировку стека, чтобы увидеть, что они делают?
Есть еще идеи?
Спасибо!