Почему Tomcat 5.5 (с Java 1.4, работающий в 32-разрядной версии Windows XP) внезапно зависает?

StackOverflow https://stackoverflow.com/questions/66104

  •  09-06-2019
  •  | 
  •  

Вопрос

Я уже некоторое время использую Tomcat 5.5 с Java 1.4 с огромным веб-приложением.Большую часть времени он работает нормально, но иногда он просто зависает, без каких-либо исключений, и нет видимого способа заставить его снова запуститься, кроме перезапуска Tomcat.Экземпляру tomcat разрешен гигабайт памяти в куче, но он редко превышает 300 МБ.Кто-нибудь еще сталкивался с этой проблемой и есть ли для нее решение?

В целях разъяснения:Я определил, сколько памяти он использует, через диспетчер задач и через Eclipse (я также пытался запустить его вне Eclipse, но в конечном итоге столкнулся с той же проблемой, хотя это занимает немного больше времени).В Eclipse я смотрю на память, выделенную через небольшую (необязательную) панель памяти, и объем, выделенный для javaw.exe через диспетчер задач.Я использую sysdeo?Плагин tomcat для Eclipse.

Это было полезно?

Решение

Для любого процесса jvm принудительно создайте дамп потока.В Windows это можно сделать, по-моему, с помощью CTRL-BREAK в окне консоли.

В *nix это почти всегда «kill -3 jvm-pid».

Это может показать, есть ли у вас потоки, ожидающие пула соединений с БД/пула потоков и т. д.

Еще одна вещь, которую следует проверить, — это количество подключений, которые у вас есть в настоящее время к JVM — используйте утилиту NETSTAT или SysInternals, например tcpconn/tcpview (погуглите).

Также попробуйте запустить с флагом JVM verbose:gc.Для Sun JVM запустите как «java -verbose:gc».Это покажет ваши сборки мусора.Если он собирает много (особенно ПОЛНЫЕ КОЛЛЕКЦИИ), то, вероятно, у вас есть утечка памяти.Полные коллекции обходятся дорого, особенно в таких больших кучах.

Как вы определяете, что используется только 300 МБ?

Другие советы

Похоже, вы зашли в тупик.

Если вы можете воспроизвести это в среде разработки, попробуйте подключить отладчик, как только это произойдет.Посмотрите свои темы и посмотрите, есть ли у вас тупики.

Если вы не можете подключить отладчик, вы сможете создать дамп потока, как отметил Дастин.

Попробуйте повысить чувствительность ведения журнала для сервера приложений Tomcat.http://tomcat.apache.org/tomcat-5.5-doc/logging.html

Вы можете увеличить чувствительность к FINEST или ALL для большинства из них на несколько дней и посмотреть, поможет ли это вам что-нибудь уловить.

Я согласен с созданием нескольких дампов потоков и их просмотром: Анализатор дампов потоков

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top