lsof -i 是快照式诊断工具,不能实时监控或直接判断进程是否因网络I/O挂起;需结合 ps、/proc/PID/stack、strace 等交叉验证,并用 ss、/proc/net/snmp 或 eBPF 工具实现真正监控。

lsof -i 本身不提供“实时监控”能力,也不能直接判断进程是否因网络 I/O 挂起或端口“阻塞”(注意:端口不会阻塞,是进程在监听/连接时被卡住)。它是一个快照式诊断工具,用于查“此刻谁在用哪个端口、处于什么连接状态”。所谓“网络 IO 导致进程挂起”,本质是进程在 socket 系统调用(如 recvfrom、accept、connect)上阻塞——这属于进程运行态问题,需结合 lsof 输出 + 进程状态 + 系统调用追踪综合判断。
确认进程是否真在阻塞式网络 I/O 上挂起
仅靠 lsof -i 输出无法得知进程是否卡住。需配合以下方法交叉验证:
- 用 ps -o pid,stat,comm -p PID 查看进程状态:若 STAT 列含 D(不可中断睡眠),说明它正卡在内核态 I/O(如磁盘或某些驱动),但网络 socket 阻塞通常表现为 S(可中断睡眠);
- 用 cat /proc/PID/stack(需 root)查看内核栈:若栈顶是
tcp_recvmsg、inet_csk_accept或sys_connect,基本可判定进程正阻塞在网络系统调用上; - 用 strace -p PID -e trace=recvfrom,sendto,accept,connect 实时观察系统调用行为:若长时间无返回、或反复返回
EAGAIN/EWOULDBLOCK(非阻塞模式下)或干脆停住不动(阻塞模式下),就是典型挂起迹象。
用 lsof -i 辅助定位可疑连接与监听异常
虽然不能直接“监控挂起”,但 lsof -i 能快速暴露易引发挂起的配置或状态问题:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- lsof -iTCP -sTCP:LISTEN -P -n:列出所有 TCP 监听端口,检查是否有多个进程监听同一端口(冲突)、或本不该监听的端口被意外打开(如开发环境残留服务);
-
lsof -i @192.168.1.100 -P -n:查看与特定远端 IP 的所有连接,若发现大量
SYN_SENT(连接未建立成功)或FIN_WAIT2(连接关闭异常残留),可能预示对方不可达或防火墙拦截,导致 connect() 或 close() 长时间阻塞; -
lsof -i :8080 -P -n + 观察 STATE 列:若看到大量
ESTABLISHED但无数据交互,或大量CLOSE_WAIT(对端已关闭,本端未调用 close),往往是应用层未正确处理连接生命周期,最终耗尽 socket 资源,间接造成新连接 accept() 阻塞。
构建轻量级“准实时”排查链路(非轮询监控)
不推荐用 while 循环跑 lsof 做“监控”(开销大、信息冗余)。更实用的是按需触发的组合命令:
- 发现服务响应慢时,一键查端口+进程+状态:
sudo lsof -i :8080 -P -n; echo "---"; ps -o pid,ppid,stat,comm,user,etime -p $(lsof -ti:8080 2>/dev/null); echo "---"; ss -tulnp | grep ':8080' - 检测是否存在“僵尸监听”(进程已死但端口未释放):
sudo lsof -iTCP -sTCP:LISTEN -P -n | awk '$9 ~ /:[0-9]+$/ {print $2,$9}' | while read pid port; do [ -d "/proc/$pid" ] || echo "PID $pid gone but port $port still shows"; done - 配合 timeout 防止阻塞命令拖慢排查:
timeout 3s strace -p $(lsof -ti:8080) -e trace=accept,recvfrom 2>&1 | tail -5(捕获最近几条关键调用)
真正需要监控时,应换用专业工具
若业务要求持续观测网络 I/O 阻塞趋势,lsof 不是合适选择。推荐:
- ss -i:显示 socket 内部统计(如 retrans、rto、qsize),反映真实网络拥塞与重传压力;
- /proc/net/snmp 与 /proc/net/netstat:解析 TCP 全局指标(如 PassiveOpens、AttemptFails、EstabResets),识别协议层异常;
- Prometheus + node_exporter:采集 socket 指标(node_netstat_Tcp_CurrEstab、node_sockstat_TCP_alloc)并设告警;
- eBPF 工具(如 bpftrace / tcplife):无侵入跟踪每个 TCP 连接生命周期,精准定位超时、重传、零窗等根因。

















