Tomcat не удалось завершить работу

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

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

Я получаю следующую ошибку всякий раз, когда пытаюсь выключить кота:

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)

person Rahul    schedule 08.07.2009    source источник


Ответы (7)


Спасибо за хорошее краткое объяснение, PHeath! Следуя вашему совету, я обнаружил, что лучший способ решить проблему — просто использовать 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/tomcat6/tomcat6.conf (или любой другой путь в вашем дистрибутиве) будет чище, чем непосредственное изменение сценария catalina.sh для диспетчера пакетов. предполагает, что пользователь изменяет только файлы конфигурации, и нарушение этого предположения может вызвать проблемы при обновлении пакетов Tomcat (например, потерянные настройки из-за перезаписи файла catalina.sh).

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

person Jaan    schedule 21.11.2011
comment
Каково ваше решение при использовании spring-boot (встроенный tomcat)? - person Ali Sohrabi; 16.12.2019

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

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

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

person PHeath    schedule 24.09.2009

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

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

  • если это в среде Linux ps -ef|grep java, и определите идентификатор его процесса. и завершите процесс с помощью sudo kill -9 .
  • Если он в среде Windows попал в диспетчер задач и убил процесс tomcat и java.

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

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

Сначала закройте Eclipse, а также завершите процесс Java и запустите его снова.

person Dinusha    schedule 16.04.2014

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

Это может быть потому, что вы уже открыли tomcat. Проверьте свои процессы.

person Mercer Traieste    schedule 08.07.2009

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

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

SET DEBUGPORT=8001

person Venkatram Mutyala    schedule 03.12.2012

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

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

person Gary Steven    schedule 19.11.2009

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

person Saurabh    schedule 05.08.2015