我在集群中运行3个tomcat(不同的httpd和AJP13端口),前面有一个apache。
看起来只有一个 Tomcat 保持运行,而 jkstatus 管理器中的其他两个错误
错误日志表明端口已绑定
30-Oct-2017 21:53:09.794 SEVERE [main] org.apache.catalina.core.StandardServer.await StandardServer.await: create[localhost:8006]:
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:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:441)
at org.apache.catalina.startup.Catalina.await(Catalina.java:758)
at org.apache.catalina.startup.Catalina.start(Catalina.java:704)
运行 netstat 提示相同
[root@dev logs]# netstat -anop | grep 8009
tcp6 0 0 :::8009 :::* LISTEN 28887/java off (0.00/0/0)
tcp6 0 0 ::1:8009 ::1:58801 ESTABLISHED 28887/java off (0.00/0/0)
tcp6 0 0 ::1:58791 ::1:8009 ESTABLISHED 29719/httpd off (0.00/0/0)
tcp6 0 0 ::1:58801 ::1:8009 ESTABLISHED 29709/httpd off (0.00/0/0)
tcp6 0 0 ::1:8009 ::1:58807 ESTABLISHED 28887/java off (0.00/0/0)
tcp6 0 0 ::1:58807 ::1:8009 ESTABLISHED 29705/httpd off (0.00/0/0)
tcp6 0 0 ::1:8009 ::1:58803 ESTABLISHED 28887/java off (0.00/0/0)
tcp6 0 0 ::1:58803 ::1:8009 ESTABLISHED 29706/httpd off (0.00/0/0)
tcp6 0 0 ::1:8009 ::1:58805 ESTABLISHED 28887/java off (0.00/0/0)
tcp6 0 0 ::1:58805 ::1:8009 ESTABLISHED 29708/httpd off (0.00/0/0)
tcp6 0 0 ::1:8009 ::1:58791 ESTABLISHED 28887/java off (0.00/
我已经检查了不同 Tomcat 实例的 server.xml 文件,并且没有看到 http/ajp13 端口中再次使用的端口。
知道是什么原因造成的吗?
答案1
我的印象是您已经知道这一点:由于您正在运行侦听同一 IP 地址的 Tomcat 实例,因此您需要确保 Tomcat 使用的每个端口在每个实例中都设置不同。这包括关闭端口:例如,您可以使用 8006、8007 和 8008(假设没有其他端口使用这些端口)。
替代方法包括使用容器来托管实例或网络命名空间。这样您就可以在每个实例中使用相同的端口。