linux监控udp连接数与状态的核心是关注监听端口、recv-q积压及异常绑定,推荐用sudo ss -ulnp查监听端口与进程,结合/proc/net/udp分析inode和原始数据,警惕recv-q非零、0.0.0.0绑定高危端口等异常行为。

Linux 监控 UDP 连接数与状态信息,核心在于理解 UDP 的无连接特性——它没有 ESTABLISHED、TIME_WAIT 等 TCP 状态,所谓“连接”实际指绑定的端口和接收队列活动。监控重点是:哪些进程在监听哪些 UDP 端口、是否有数据积压(Recv-Q 非零)、是否存在异常绑定(如 0.0.0.0 绑定高危端口)。
用 ss 命令快速查看 UDP 端口监听与绑定
ss 是当前最推荐的工具,速度快、字段清晰、无需额外安装:
-
列出所有监听的 UDP 端口(含进程名):
sudo ss -ulnp
其中-u指 UDP,-l表示监听,-n禁用解析,-p显示进程(需 root 权限) -
只看本机监听(排除通配符 0.0.0.0):
sudo ss -ulnp | grep ':127\.0\.0\.1\|:localhost' -
检查某端口(如 53)是否被占用:
sudo ss -ulnp | grep ':53\b',输出中能看到进程名(如 systemd-resolved)和 PID
通过 /proc/net/udp 获取原始统计与 inode 关联
/proc/net/udp 是内核直接暴露的数据源,适合脚本化或深度排查:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 执行
cat /proc/net/udp可看到每行代表一个 UDP socket,关键列包括:
第1列(sl)为序号;第3列(local_address)是十六进制 IP:Port(如0100007F:0035= 127.0.0.1:53);第7列(st)恒为07(UNCONN);第10列(inode)用于关联进程 - 统计当前监听的 UDP socket 总数(不含重复 inode):
awk 'NR>1 {print $10}' /proc/net/udp | sort -u | wc -l - 结合进程 fd 查具体归属:先查某进程(PID=1234)的 UDP socket inode:
ls -l /proc/1234/fd/ 2>/dev/null | grep socket | awk '{gsub(/[^0-9]/,"",$11); print $11}' | sort -u,再用这些 inode 去匹配 /proc/net/udp 第10列
识别异常 UDP 行为的关键指标
UDP 本身不建连,但以下现象值得警惕:
-
Recv-Q 长期非零:用
ss -uln查看 Recv-Q 列,若持续大于 0(尤其远超 100),说明应用读取速度跟不上接收速度,可能丢包或服务卡顿 -
监听在 0.0.0.0 而非 127.0.0.1:如
0.0.0.0:161(SNMP)或0.0.0.0:5353(mDNS),需确认是否必须对外提供服务 -
高随机端口大量绑定:例如数百个
127.0.0.1:48xxx,可能是应用频繁创建 UDP socket 后未释放,存在资源泄漏 -
无对应进程的监听项:用
sudo ss -ulnp出现-或???在进程列,可能为内核模块、僵尸 socket 或权限不足导致无法读取
轻量级持续监控建议
不依赖第三方服务,用 shell 脚本即可实现基础趋势观察:
- 每 5 秒记录一次监听 UDP 数量:
while true; do echo "$(date '+%F %T') $(ss -unl | wc -l)"; sleep 5; done >> /tmp/udp_listen.log - 检测 Recv-Q 异常飙升:
ss -uln | awk '$2 > 100 {print "ALERT: high Recv-Q on "$5" ("$2")"}' - 对比 netstat(仅作验证):
netstat -uln | wc -l应与ss -uln | wc -l结果基本一致;若差异大,说明有 socket 处于特殊状态(如已关闭但未清理)










