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 的两个子进程监听,而 netstat 只显示父进程 ID?
答案1
简短的回答是“因为进程要求内核允许它绑定到三个端口”。这方面没有隐含的限制;这是我的 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
答案2
更具体地说,8009 是 Tomcat 的默认 AJP 连接器端口(例如,Apache 中的 mod_ajp 与 Tomcat 通信),而 localhost:8005 是默认关闭端口。据推测,您使用 8000 作为 HTTP 连接器端口。您应该能够在 Tomcat 文档中找到更深入的讨论。