核心思路是定位进程→查其网络活动→判连接状态;用lsof -i -P -n -p PID查指定进程的网络socket,lsof -i :端口或ss -tulnp查监听进程,结合ps、/proc/PID/stack、strace和/proc/net/tcp分析I/O阻塞与连接异常。

Linux中监控进程的网络连接状态,核心思路是“定位进程 → 查看其网络活动 → 判断连接是否正常”。不能只依赖单一命令,需组合使用轻量、精准、权限适配的工具。
查进程正在用哪些端口和连接
用 lsof -i -P -n -p PID 可直接列出指定进程打开的所有网络 socket,包括协议、本地/远程地址、端口和连接状态(如 ESTABLISHED、LISTEN、TIME_WAIT)。
例如:
sudo lsof -i -P -n -p 1234(1234 是目标进程 PID)
加 -sTCP:ESTABLISHED 可只看已建立的 TCP 连接,避免干扰信息。
看谁在监听某个端口
当发现某端口异常(比如服务不响应),先确认是哪个进程在监听:
sudo lsof -i :8080 -P -n 或更高效地用 sudo ss -tulnp | grep :8080
ss 比 lsof 更快,-p 参数需 root 权限才能显示进程名和 PID。若输出为空,说明该端口当前无进程监听;若出现多个进程监听同一端口,大概率存在端口冲突。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
判断进程是否卡在网络 I/O 上
仅看连接列表不够——进程可能“挂着不动”。关键看它是否阻塞在 socket 系统调用上:
• 运行 ps -o pid,stat,comm -p PID:若 STAT 含 S(可中断睡眠),且长时间不变,需进一步排查;
• 查内核栈:sudo cat /proc/PID/stack,若栈顶是 tcp_recvmsg、inet_csk_accept 或 sys_connect,基本确认卡在网络调用;
• 实时追踪系统调用:sudo strace -p PID -e trace=recvfrom,sendto,accept,connect -T 2>/dev/null,若调用长期无返回或反复报 EAGAIN,就是典型挂起迹象。
统计连接数与异常状态
批量观察整体情况时,绕过进程级工具,直接读内核接口更稳定:
• 查当前 ESTABLISHED 连接总数:
awk '$4 == "01" {count++} END {print count+0}' /proc/net/tcp
• 查 CLOSE_WAIT 过多(常因应用未 close 导致):
awk '$4 == "08" {count++} END {print count+0}' /proc/net/tcp
• 按进程统计 socket 数量:
ls -l /proc/PID/fd/ 2>/dev/null | grep socket | wc -l










