Java 使用本地用户启动Tomcat会导致JVM\u绑定异常

Java 使用本地用户启动Tomcat会导致JVM\u绑定异常,java,windows,tomcat,Java,Windows,Tomcat,我有一个tomcat服务,它可以通过本地系统帐户正常启动,但是当我将其切换到以本地用户身份登录时,我得到了一个JVM_绑定异常。服务先启动,然后关闭 看起来关机端口已被其他服务使用。我可以将tomcat服务更改为使用不同的关闭端口,但我想了解为什么它在系统帐户中启动良好,并在用户帐户中抱怨关闭端口 06-Jun-2017 15:46:13.801 SEVERE [main] org.apache.catalina.core.StandardServer.await StandardServer.

我有一个tomcat服务,它可以通过本地系统帐户正常启动,但是当我将其切换到以本地用户身份登录时,我得到了一个JVM_绑定异常。服务先启动,然后关闭

看起来关机端口已被其他服务使用。我可以将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)
06-Jun-2017 15:46:13.801严重[main]org.apache.catalina.core.StandardServer.await-StandardServer.await:create[localhost:10006]:
java.net.BindException:地址已在使用中:JVM\u Bind
位于java.net.DualStackPlainSocketImpl.bind0(本机方法)
位于java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
位于java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
位于java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
位于java.net.ServerSocket.bind(ServerSocket.java:375)
位于java.net.ServerSocket.(ServerSocket.java:237)
位于org.apache.catalina.core.StandardServer.await(StandardServer.java:420)
位于org.apache.catalina.startup.catalina.await(catalina.java:713)
位于org.apache.catalina.startup.catalina.start(catalina.java:659)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

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

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


如果两个应用程序处于不同的用户上下文中,那么我们将得到异常

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

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

Mac

  • Kill processId终端
    Kill

    要查找ProcessId,请使用下面的命令。
    lsof-i:

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


  • 您确定Tomcat在使用其他用户启动之前已正确关机吗?@MinhKieu我非常确定。我怎么说?我可以停止使用同一端口的其他服务,并与本地用户一起重新启动tomcat服务,它就会工作。那么,“使用同一端口的其他服务”是什么呢?测试端口是否处于活动状态的一种方法是连接到端口。“telnet本地主机10006”。要检查tomcat是否仍在运行,请执行“ps-ef | grep tomcat”,假设您在Linux上运行。这是一项专有服务。端口处于活动状态,Tomcat已正确关闭。可能您的用户没有打开此端口的权限?很奇怪。或许可以在网络频道上提问。