发布时间:2026-07-21阅读(1)
最近经常收到一台服务器的Zabbix告警,内容如下:

文件描述符过多告警
容易看到是服务器打开的文件描述符过多,导致告警触发。这台服务器运行的程序较多,找出到底是哪个程序打开了过量的文件描述符不是那么容易,编写一个脚本来帮助我们揪出问题程序:
#!/bin/bashcd /procfor pid in [0-9]*do echo "PID = $pid with $(ls /proc/$pid/fd/ | wc -l) file descriptors"done | sort -rn -k5 | head | while read -r _ _ pid _ fdcount _ _do command=$(ps -o comm -p "$pid" --no-headers) printf "pid = ] with M fds: %s\n" "$pid" "$fdcount" "$command"done
脚本运行的结果:
[aneirin@host~]$sudo ./print-fds.sh pid = 15837 with 100283 fds: javapid = 2917 with 3097 fds: mysqldpid = 5990 with 1246 fds: javapid = 35294 with 487 fds: javapid = 31002 with 145 fds: javapid = 33494 with 69 fds: javapid = 3279 with 65 fds: javapid = 22108 with 62 fds: redis-serverpid = 3090 with 27 fds: memcachedpid = 2420 with 23 fds: modem-manager
看到PID号为15837的程序打开了过多的文件描述符,此时可以协调程序作者或者紧急通过systemd限制该程序所能打开的最多文件描述符,这个告警便可以排除。
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图