저는 Apache가 앞에 있는 클러스터에서 3개의 Tomcat(다른 httpd 및 AJP13 포트)을 실행하고 있습니다.
하나의 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을 사용할 수 있습니다(다른 포트가 이러한 포트를 사용하지 않는다고 가정).
대안으로는 컨테이너를 사용하여 인스턴스 또는 네트워크 네임스페이스를 호스팅하는 것이 있습니다. 이렇게 하면 모든 인스턴스에서 동일한 포트를 사용할 수 있습니다.