使用本地用户启动Tomcat会导致JVM_Bind异常

时间:2017-06-06 21:23:13

标签: java windows tomcat

我有一个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)

2 个答案:

答案 0 :(得分:1)

发现一个服务正在侦听无效地址,而Tomcat服务正在侦听环回地址。

根据https://msdn.microsoft.com/en-us/library/windows/desktop/ms740621(v=vs.85).aspx

如果两个应用程序都在同一个用户上下文中,那么如果其中一个应用程序使用了无效地址,则它们都可以绑定到同一个端口。 (0.0.0.0)

如果两个应用程序都在不同的用户上下文中,那么我们就会得到异常。

答案 1 :(得分:0)

Tomcat JVM_BIND异常的通用解决方案
Windows
1)可能是其他一些服务正在侦听同一个端口8080,在这种情况下,请转到%TOMCAT_HOME%/ conf / server.xml并将端口更改为所需的整数,如8081,9080等。
2)转到Windows任务管理器并检查后面运行的其他一些java进程,如果运行结束进程。
3)您可以在Windows上执行netstat命令来检查活动连接,并检查正在侦听的8080或(无论您配置的)端口并终止这些服务。

Netstat

<强>的Linux
1) ps - ef | grep java 如果许多进程运行不相关,请使用此命令识别后面运行的进程。你可以通过 kill - 9 processid 来杀死进程 2)您可以在linux上执行netstat命令并检查正在侦听的8080或(无论您配置的)端口并终止这些服务。
3)您还可以将$ TOMCAT_HOME / conf / server.xml端口号更改为所需的整数。

<强>苹果

  1. Kill processId terminal kill <pid>

    要查找ProcessId,请使用以下命令    lsof -i:

  2. 您还可以将$ TOMCAT_HOME / conf / server.xml端口号更改为所需的整数。