Подтвердить что ты не робот

Tomcat не смог завершить работу

Когда я добавляю следующие параметры Java для включения отладки:

JAVA_OPTS="$JAVA_OPTS -noverify -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"

При попытке отключить tomcat я получаю следующую ошибку:

ERROR: transport error 202: bind failed: Address already in use ["transport.c",L41]
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L500]
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initializedFATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ERROR_INTERNAL(113)
4b9b3361

Ответ 1

Спасибо за хорошее короткое объяснение, Фета! Следуя вашим советам, я нашел, что лучший способ решить проблему - просто использовать CATALINA_OPTS вместо JAVA_OPTS.

В Catalina.sh можно увидеть, что CATALINA_OPTS используется только командами "start" и "start-security", тогда как JAVA_OPTS также используется командой "stop" (по крайней мере, с Tomcat 6.0.33 на openSUSE 12.1).

По крайней мере, если у вас установлен Tomcat в Linux с помощью диспетчера пакетов, то изменение переменной CATALINA_OPTS в файле /etc/tomcat 6/tomcat6.conf(или любой другой путь в вашем дистрибутиве) будет более чистым, чем изменение каталога catalina.sh script напрямую, поскольку менеджер пакетов предполагает, что пользователь изменяет только файлы конфигурации, и нарушение этого предположения может вызвать проблемы при обновлении пакетов Tomcat (например, потерянные настройки, поскольку файл catalina.sh перезаписан).

Я думаю, что лучше использовать CATALINA_OPTS над JAVA_OPTS не только для JDWP, но и для многих других опций: e. г. если использовать параметр размера кучи -Xmx... тогда было бы разумно поместить его в CATALINA_OPTS, так как команде "stop" не нужно много кучи.

Ответ 2

Вы пытаетесь отладить tomcat при запуске, поэтому он связывается с портом 5005 при запуске jvm.

При запуске catalina.sh stop запускается еще один jvm, который также пытается привязать к порту 5005.

Вам нужно переместить аргументы debug в run и начать аргументы (в catalina.sh) tomcat, поэтому их прямо в JAVA_OPTS является причиной проблемы, с которой вы сталкиваетесь.

Ответ 3

Проблема заключается в том, что ваш tomcat все еще работает на порту отладки (5005) или какой-либо другой службе, запущенной на том же порту (5005).

Если tomcat все еще работает, вы можете его убить

  • если он находится в среде linux ps -ef | grep java и идентифицирует идентификатор процесса. и убить процесс, используя sudo kill -9.
  • Если он в среде Windows попадает в диспетчер задач и убивает процесс tomcat и java.

Теперь вы можете запустить сервер в отладочном настроении без каких-либо проблем.

Это может произойти при отладке unit test с помощью инструмента (eclipse), который был выполнен через maven. Для этого вы можете протекать по тому же самому процессу.

Сначала закройте Eclipse и убейте java-процесс и запустите его снова.

Ответ 4

Кажется, что порт 5005 уже используется. Проверьте открытые порты командой netstat.

Возможно, это связано с тем, что вы уже открыли tomcat. Проверьте свои процессы.

Ответ 5

Это связано с тем, что оба приложения прослушивают один и тот же номер порта i.e 8000 во время работы в режиме отладки.

Одним быстрым решением является изменение порта отладки на 8001 в startup.bat

SET DEBUGPORT=8001

Ответ 6

Кажется, вы запускаете Tomcat с включенным Debugger. Это заставляет JVM подключаться к процессу отладки, однако в файле catalina.sh есть сценарий case для запуска, остановки, перезапуска и т.д. и т.д. Выдача команды останова по-прежнему добавляет это, поскольку она является частью вашего глобального JAVA_OPTS и пытается запустить отладчик, прослушивающий тот же порт для команды shutdown. Если вы удалите адрес = 50005 из JAVA_OPTS или используйте команды запуска jdpa для запуска виртуальной машины с помощью отладчика, это устранит вашу проблему.

Посмотрите на Catalina.sh по умолчанию в последнем дистрибутиве Tomcat, если вам нужна чистая копия. Похоже, что кто-то внесла изменения внутри вашего, которые являются недействительными и заставляют JDPA запускаться при запуске, остановке, любой выданной команде.

Ответ 7

установить JPDA_ADDRESS = 8001 в Catalina.bat, то есть порт отладки и изменить все 3 порта в server.xml