我的服务器中运行了 2 个 Tomcat:一个 Tomcat 7,另一个是 Tomcat 8。
第一个的配置文件server.xml
是:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
在我的第二个 Tomcat 中:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
当我运行第一个 Tomcat 时,控制台显示以下内容:
java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
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(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
但第二个运行良好。我正在使用命令 netstate -tnao
并看到端口是空闲的。
最佳答案
您需要为tomcat 实例设置不同的端口,包括但不限于connector 端口、ajp 端口、shutdown 端口。一旦你有了这个错误就会消失。
但是,使用 CATALINA_BASE 变量使用相同的 tomcat 二进制文件来运行多个 tomcat 实例是一种很好的做法。更多详细信息在下面的链接中。请参阅有关运行多个实例的部分。另请注意,相同的 RUNNING.txt 文件也将在 tomcat 二进制文件中,您也可以在那里查看它。
http://tomcat.apache.org/tomcat-7.0-doc/RUNNING.txt
关于java.net.绑定(bind)异常 : Address already in use: JVM_Bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27260314/