为什么netstat显示Tomcat进程侦听多个端口?

tomcat进程(pid:28899)的netstat输出如下:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 28899/java .... tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 28899/java .... tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN 28899/java 

那么为什么一个进程可以在三个TCP端口上侦听呢? 是因为8009和8005被tomcat的两个subprocess监听,netstat只显示父进程ID?

简短的回答是“因为进程要求内核让它绑定到三个端口”。 这里没有隐含的条款。 这里是我的apache,快乐地听两个端口:

 [madhatta@lory mail]$ sudo netstat -apn|grep http tcp 0 0 178.18.123.145:443 0.0.0.0:* LISTEN 1753/httpd tcp 0 0 :::80 :::* LISTEN 1753/httpd 

更具体地说,8009是Tomcat的默认AJP连接器端口(例如,Apache中的mod_ajp与Tomcat通信),localhost:8005是默认的closures端口。 据推测,你使用8000作为HTTP连接器端口。 您应该能够在Tomcat文档中find更深入的讨论。