Почему Tomcat 5.5 (с Java 1.4, работающей на 32-битной Windows XP) неожиданно зависает? - PullRequest
0 голосов
/ 15 сентября 2008

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

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

Ответы [ 4 ]

3 голосов
/ 15 сентября 2008

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

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

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

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

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

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

0 голосов
/ 15 сентября 2008

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

0 голосов
/ 15 сентября 2008

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

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

0 голосов
/ 15 сентября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...