Пытаясь запустить новое приложение из файла war, я получаю java. net .BindException: адрес уже используется - PullRequest
0 голосов
/ 07 февраля 2020

На нашем сервере уже есть два запущенных приложения, которые правильно работают на сервере centOS, используя tomcat7.

Я загрузил новый файл войны с новым приложением, а затем:

sh ./shutdown.sh
sh ./startup.sh

Когда я пытаюсь запустить API из postman, используя конечную точку нового приложения, то в файле журнала сервера я получаю:

07-Feb-2020 16:57:22.925 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [15,277] milliseconds
07-Feb-2020 16:57:22.927 SEVERE [main] org.apache.catalina.core.StandardServer.await Failed to create server shutdown socket on address [localhost] and port [8005] (base port [8005] and offset [0])
    java.net.BindException: Address already in use (Bind failed)
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
        at java.net.ServerSocket.bind(ServerSocket.java:390)
        at java.net.ServerSocket.<init>(ServerSocket.java:252)
        at org.apache.catalina.core.StandardServer.await(StandardServer.java:584)
        at org.apache.catalina.startup.Catalina.await(Catalina.java:721)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:667)
        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:343)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
07-Feb-2020 16:57:22.927 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
07-Feb-2020 16:57:22.927 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 16:57:22.927 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
07-Feb-2020 16:57:23.050 WARNING [1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [cef-authentication] appears to have started a thread named [mysql-cj-abandoned-connection-cleanup] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
07-Feb-2020 16:57:23.054 INFO [1] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
07-Feb-2020 16:57:23.054 INFO [1] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
07-Feb-2020 16:57:23.054 INFO [1] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 16:57:23.054 INFO [1] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 16:57:23.059 INFO [17] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load [java.lang.ClassLoader]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
    java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [java.lang.ClassLoader]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
        at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1385)
        at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1373)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1226)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
        at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkThreadContextClassLoader(AbandonedConnectionCleanupThread.java:117)
        at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:84)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Знаете ли вы, как это исправить, не прерывая другие приложения?

1 Ответ

1 голос
/ 07 февраля 2020

Это предупреждение означает, что ваши приложения пытаются прослушивать порт (localhost:8005 в вашем случае), который уже используется другим процессом.

  • Если этот порт намеренно используется другое приложение, то вы ничего не можете с этим поделать (вы не можете иметь несколько серверов на одном порту). Поэтому вы должны изменить порт этого приложения (например, на 8006)
  • Если этот порт не должен использоваться, например, используется из-за неправильно завершенного приложения, из-за которого запущенные процессы оставили запущенные процессы, используйте netstat для найти этот процесс и убить его. Затем снова запустите приложение.
...