Проблемы отладки при отключении Apache Tomcat - PullRequest
2 голосов
/ 11 октября 2009

У меня установлен Tomcat в качестве службы Windows, и иногда он зависает при попытке выключить его (через services.msc). Я попытался подключиться к нему с помощью отладчика, но я не могу понять, почему он зависает.

Когда я пытаюсь посмотреть на один из потоков, выполнив «Thread.getThreads () [0]», я получаю сообщение об ошибке отладчика: «Стек стека недоступен».

Если вместо завершения всего Tomcat я просто выгружаю все контексты своих сервлетов, все работает отлично.

Как бы вы поступили в отладке этого? Это ошибка по определению в Tomcat?

Ответы [ 3 ]

1 голос
/ 13 октября 2009

Для полноты картины я должен спросить: вы проверяли собственные файлы журнала Tomcat?

%TomcatHome%\logs

что, вероятно, что-то вроде ...

C:\Program Files\Apache Software Foundation\Tomcat 6.0\logs

Пожалуйста, прости меня, если это первое, что ты попробовал, но ты не упомянул об этом, поэтому я решил попросить, чтобы быть уверенным.

1 голос
/ 11 октября 2009

Я не думаю, что это ошибка в tomcat, так как мои коты закрыты в порядке.

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

Еще один вопрос - что происходит, когда вы делаете это из командной строки (не с экрана служб)?

Редактировать

Для удаленной отладки необходимо добавить следующее в JAVA_OPTS

JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

Затем вы можете присоединить IDE, как eclipse, к процессу (ищите удаленную отладку). Вы можете скачать исходный код с здесь . То, что вы ищете (я думаю), это методы, реализующие Lifecycle.stop () или реализации LifecycleListener . Извините, я не могу быть более конкретным.

Редактировать 2

Еще одна вещь - если это ваш компьютер для разработки, я считаю, что лучше всего запускать eclipse не как службу, а из командной строки или напрямую из IDE

0 голосов
/ 11 октября 2009

Одна вещь, которую вы можете попробовать сделать, это использовать профилировщик, чтобы увидеть, какие объекты остались в памяти после завершения работы.

Я столкнулся с подобной проблемой, когда в моей кодовой базе была «утечка логической памяти». Слово должно быть тщательно выбрано, потому что сборка мусора Java предотвращает большинство утечек памяти. Утечки логической памяти создаются программистами, которые не настолько осторожны, как следовало бы, или испытывают слишком много времени.

В любом случае, мы использовали JProfile, чтобы увидеть, какие объекты еще были живы на виртуальной машине, и мы обнаружили, что некоторые потоки не были должным образом обработаны во время завершения работы. Если вы сможете узнать, какие объекты еще живы, у вас будет подсказка, почему tomcat не закрывается полностью.

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