Запуск Tomcat с локальным пользователем вызывает исключение JVM_Bind

62
2

У меня есть служба tomcat, которая начинается нормально с локальной учетной записи системы, но когда я ее переключаю для входа в систему как локальный пользователь, я получаю исключение JVM_Bind. Служба запускается, а затем выключается.

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

06-Jun-2017 15:46:13.801 SEVERE [main] org.apache.catalina.core.StandardServer.await StandardServer.await: create[localhost:10006]: 
java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:420)
at org.apache.catalina.startup.Catalina.await(Catalina.java:713)
at org.apache.catalina.startup.Catalina.start(Catalina.java:659)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

спросил(а) 2021-01-25T16:39:33+03:00 4 месяца, 3 недели назад
1
Решение
63

Установлено, что одна служба прослушивает недействительный адрес, а служба Tomcat прослушивает обратный адрес.

Согласно https://msdn.microsoft.com/en-us/library/windows/desktop/ms740621(v=vs.85).aspx

Если оба приложения находятся в одном и том же контексте пользователя, то оба могут привязываться к одному и тому же порту, если одно из приложений использует неверный адрес. (0.0.0.0)

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

ответил(а) 2021-01-25T16:39:33+03:00 4 месяца, 3 недели назад
45

Общее решение для исключений Tomcat JVM_BIND
Windows
1) Возможно, некоторые другие службы прослушивают один и тот же порт 8080. В таких случаях перейдите в% TOMCAT_HOME%/conf/server.xml и измените порт на нужное целое число, например 8081,9080 и т.д.
2) Перейдите в диспетчер задач Windows и проверьте, не работает ли какой-либо другой java-процесс, если он завершает процесс.
3) Вы можете выполнить команду netstat в Windows, чтобы проверить наличие активных подключений и проверить на 8080 или (независимо от ваших настроенных) порты, которые прослушивают и убивают эти службы.

Netstat

Linux
1) ps - ef | grep java использует эту команду, чтобы идентифицировать выполняющийся процесс, если многие процессы работают, что не имеет значения. Вы можете убить процесс kill-9 processid
2) Вы можете выполнить команду netstat на linux и проверить для 8080 или (независимо от ваших настроенных) портов, которые прослушивают и убивают эти службы.
3) Также вы можете изменить свой номер порта $ TOMCAT_HOME/conf/server.xml на нужные вам целые числа.

макинтош

Kill processId terminal kill <pid>

Чтобы найти ProcessId, используйте эту команду ниже.
lsof -i:

Также вы можете изменить свой номер порта $ TOMCAT_HOME/conf/server.xml на нужные целые числа.

ответил(а) 2021-01-25T16:39:33+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема