首页/系统/Linux 运维命令速查/场景:文件句柄耗尽排查
本包目录(613 条)
文件与目录76 条文本处理77 条网络命令82 条
进程与作业69 条
磁盘与文件系统51 条用户与权限44 条日志与排查40 条systemd 与服务42 条包管理34 条性能与监控48 条定时任务与计划50 条

场景:文件句柄耗尽排查

服务报 too many open files / accept 失败:确认进程 fd 上限与当前用量,找出泄漏来源(未关闭的连接/文件),再决定临时提限还是修复。

Linux 运维命令速查系统更新于 2026-10-12
场景Too many open files
组合/proc/PID/fd + lsof + ulimit/prlimit

量化现状

量化现状
pid=$(pgrep -f 'app-server' | head -1)
ls /proc/$pid/fd | wc -l                  # 当前 fd 数
cat /proc/$pid/limits | grep -i files     # 上限
lsof -p $pid | awk '{print $5}' | sort | uniq -c | sort -rn | head   # 按类型分布

找泄漏

找泄漏
lsof -p $pid | grep -c 'TCP'             # 连接数是否异常增长
lsof -p $pid | awk '{print $9}' | sort | uniq -c | sort -rn | head   # 集中在哪个文件
watch -n 5 'ls /proc/'$pid'/fd | wc -l'   # 观察是否持续上涨

临时缓解

临时缓解
prlimit --nofile=65535:65535 --pid $pid   # 在线提限(治标)
fd 持续增长=泄漏,提限只是拖时间;连接池/文件未 close 的代码问题该修还得修。

易错点

  • ulimit -n 改的是当前 shell;给服务持久化要改 systemd LimitNOFILE 或 limits.conf 并重启服务
  • fd 数高不一定是泄漏:长连接服务天然多(看增长趋势而不是绝对值)

数据来源与参考

  • man 5 proc
  • man 1 prlimit(util-linux 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌