我现在使用此命令来查看端口正在被哪个进程使用:
lsof -i:443
但输出让我感到困惑:
[root@k8smasterone ~]# lsof -i:443
lsof: no pwd entry for UID 65532
lsof: no pwd entry for UID 1001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lsof: no pwd entry for UID 65532
traefik 13731 65532 10u IPv4 10157368 0t0 TCP k8smasterone:35756->k8smasterone:https (ESTABLISHED)
lsof: no pwd entry for UID 1001
operator 24351 1001 6u IPv4 515576 0t0 TCP k8smasterone:49222->k8smasterone:https (ESTABLISHED)
calico-ty 25072 polkitd 7u IPv4 523993 0t0 TCP k8smasterone:49648->k8smasterone:https (ESTABLISHED)
wget 25509 root 4u IPv4 9941865 0t0 TCP iZuf62lgwih3vksz3640gnZ:46538->cdn-185-199-110-154.github.com:https (ESTABLISHED)
这是告诉我 443 端口被多进程使用吗?这样对吗?为什么会发生这种情况?
答案1
不,这只是意味着您的进程 13731、24351 和 25072 均已与该主机的端口 443 建立连接。一台一次只能处理一个连接的 Web 服务器不是一个很好的服务器,不是吗?
此外,进程 25509 已连接到 github.com 的端口 443。
该lsof
命令显示已建立的网络连接,如下所示:
<local hostname/IP>:<local port> -> <remote hostname/IP>:<remote port>
因此,只有字段中指定的端口<local port>
实际上属于该行列出的进程。这些都是随机的高编号端口:分别为 35756、49222 和 49648。这表明这些很可能是传出连接。
箭头右侧的部分仅指定连接的“远端”所在的位置:它可能连接到其他主机上的服务,或连接到同一主机上的端口。
请注意,箭头的方向与连接的建立方式无关:事实上,您的lsof
输出还应该包括与 HTTPS 服务器进程(可能是 或某些其他服务器软件)相关的行httpd
,nginx
可能有多个 PID 指示一个多线程/多进程 HTTPS 服务器,以及这些领域NAME
:
*:https (LISTEN)
(*
也可能有所不同) - 表明该进程正在侦听传入连接k8smasterone:https->k8smasterone:35756 (ESTABLISHED)
- 进程13731连接的服务器端端k8smasterone:https->k8smasterone:49222 (ESTABLISHED)
- 进程24351连接的服务器端端k8smasterone:https->k8smasterone:49648 (ESTABLISHED)
- 进程25072的连接的服务器端端
但是,如果您的配置包括一些 DNAT、负载平衡或云网络技巧,那么实际的 HTTPS 服务器很可能位于其他主机中,因此lsof
类似于这三行的行将出现在那改为主机。