Как решить java.net.BindException: адрес уже используется

2

Я пытаюсь настроить сервер tomcat 8 на ubuntu 14 через цифровой океан с помощью этого руководства https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on- ubuntu-14-04. Но я не могу добраться до страницы всплеска tomcat.

Все идет хорошо, пока я не достиг шага, чтобы запустить tomcat с

sudo initctl start tomcat

Это возвращает сообщение

tomcat start/running, процесс 9180

Но когда я печатаю URL

моя-капельку -i р-адрес: 8080

страница всплеска никогда не загружается.

Я прочитал, что вы можете начать tomcat с

sh startup.sh

Хотя, когда я это делаю, catalina.out дает мне сообщение об ошибке

31-Jul-2016 05:37:41.018 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
31-Jul-2016 05:37:41.086 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["http-nio-8080"]
 java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:229)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:866)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:213)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:558)
    at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:65)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:1010)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:873)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:606)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:629)
    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.load(Bootstrap.java:311)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)

31-Jul-2016 05:37:41.089 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-8080]]
 org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8080]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:111)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:873)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:606)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:629)
    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.load(Bootstrap.java:311)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:1012)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    ... 12 more
Caused by: java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:229)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:866)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:213)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:558)
    at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:65)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:1010)
    ... 13 more

31-Jul-2016 05:37:41.091 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8181"]
31-Jul-2016 05:37:41.105 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
31-Jul-2016 05:37:41.117 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1568 ms
31-Jul-2016 05:37:41.180 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
31-Jul-2016 05:37:41.180 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.4
31-Jul-2016 05:37:41.211 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /opt/tomcat/webapps/host-manager

Я проверил, какие порты используются с sudo lsof -i, и попытался убить процессы, которые используют порты, которые нужны tomcat, а также изменить различные порты в server.xml, чтобы избежать этой ошибки. Но это происходит независимо от того, что я делаю.

Я также недавно видел эту ссылку

https://www.digitalocean.com/community/questions/tomcat-not-starting-in-ubuntu-14-04-tomcat-7-and-java-7

который предлагает

Возможно, это связано с проблемой источника энтропии. Установите опцию

-Djava.security.egd = файл: /dev/./urandom либо в файле catalina.sh, либо /etc/default/tomcat.

Проблема в том, что я не могу найти файл /etc/default/tomcat, и не могу понять, где в catalina.sh добавить эту строку, которую предлагает автор.

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

  • 0
    Я думаю, что проблема в том, что когда вы пытаетесь запустить tomcat, используя sh startup.sh вы не можете этого сделать, потому что экземпляр, запущенный как служба, уже использует порты. Вы можете использовать команду netstat чтобы увидеть, какие порты используются и какими процессами.
  • 0
    Используемый адрес означает, что другое приложение использует адрес порта, с которого вы пытаетесь запустить Tomcat, либо, как говорят @Titus, либо другое приложение.
Теги:
digital-ocean
tomcat8
ubuntu-14.04

1 ответ

6
Лучший ответ

Как вы уже знаете, основной причиной этой проблемы является то, что ваше приложение пытается подключиться к определенному порту, который уже используется некоторыми другими процессами Java или не-Java. вот ваш ответ:

найти эти четыре порта в вашем server.xml

  1. HTTP/1.1
  2. Порт администратора Tomcat.
  3. AJP/1.3
  4. SSL (если включено).

используйте команду netstat, чтобы определить, какой процесс использует эти порты.

netstat -nap | grep <port>

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

сделайте это для всех 4 портов и перезапустите tomcat. проверьте catalina.out, если все будет хорошо, вы сможете получить доступ к своему приложению.

Это действительно проблема, связанная с источником энергии? Если да, то где в Catalina.sh эта линия идет?

Я не знаю, связано ли это с тем, чтобы связать источник или нет, но вы можете поместить -Djava.security.egd=file: /dev/./urandom в catalina.sh. найдите JAVA_OPTS в JAVA_OPTS catalina.sh и поместите его там, разделенные точкой с запятой (;) с существующими значениями.

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

  • 0
    Спасибо за помощь. Я все еще не могу развернуть приложение на tomcat, но, по крайней мере, я выяснил причину проблемы, указанной в вопросе. Netstat был хорошим решением для определения того, какие процессы используют какие порты.
  • 0
    @ Не за что. поделитесь, какое исключение вы получаете сейчас, проверьте catalina.out для дальнейшей помощи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню