麒麟系统查看当前已分配文件句柄总数最准确的方法是执行cat /proc/sys/fs/file-nr,输出第一列数值即为实时真实占用量,比lsof更底层可靠;第二列为未使用但已分配的句柄数,第三列为系统最大允许值file-max。

麒麟系统需要确认当前全系统已分配的文件句柄总数,以便判断是否接近内核上限、排查资源耗尽类故障或验证调优效果。该数值不是进程数,也不是网络连接数,而是内核中所有活跃文件描述符的实时总和。
查看系统级已分配句柄总数(最准)
执行:cat /proc/sys/fs/file-nr
输出形如 12478 0 2097152,其中第一个数字【12478】即为当前已分配的句柄总数。这个值代表内核已向各进程实际发放的句柄数量,是真实占用量,比 lsof 统计更底层、更可靠。
注意:该值会随进程创建/关闭文件动态变化,无需 root 权限即可读取。
查看系统级最大允许句柄数
执行:cat /proc/sys/fs/file-max
输出一个纯数字,例如 2097152。这是内核设定的全局天花板,所有用户、所有进程的句柄数之和不能超过此值。
若第一列数字持续逼近此值,说明系统正面临句柄枯竭风险,需立即检查泄漏进程或扩大限制。
用 lsof 粗略估算(不推荐用于精确判断)
方法一:统计所有打开文件条目
执行:sudo lsof | wc -l
该命令输出行数包含表头、空行及权限拒绝报错,结果偏高且不稳定,仅作快速感知用。
方法二:过滤掉错误并去重统计
执行:sudo lsof 2>/dev/null | tail -n +2 | wc -l
跳过首行表头,屏蔽权限错误,但依然无法覆盖 eventfd、timerfd 等非文件类句柄,不能替代 /proc/sys/fs/file-nr 的第一列数值。
验证是否存在句柄泄漏的快捷方式
第一步:记录当前已分配数cat /proc/sys/fs/file-nr | awk '{print $1}' > /tmp/handle_start
第二步:等待 2 分钟,再执行相同命令存入新文件cat /proc/sys/fs/file-nr | awk '{print $1}' > /tmp/handle_end
第三步:比较差值echo $(($(cat /tmp/handle_end) - $(cat /tmp/handle_start)))
若差值持续为正且大于 50/分钟,高度疑似某服务存在句柄未释放问题。











