有趣生活

当前位置:首页>科技>文件描述符详解快速找到每个进程打开的文件描述符数目

文件描述符详解快速找到每个进程打开的文件描述符数目

发布时间:2026-07-21阅读(1)

导读最近经常收到一台服务器的Zabbix告警,内容如下:文件描述符过多告警容易看到是服务器打开的文件描述符过多,导致告警触发。这台服务器运行的程序较多,找出到底....

最近经常收到一台服务器的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地图