讲师中心 微信公众号
AI工具推荐 视频效率加速

Linux 系统中怎么排查进程句柄泄漏导致的系统报错故障

大萱君_3488

大萱君_3488

发布时间:2026-10-02 13:20:26

|

531人浏览过

|

来源于php中文网

原创

“Too many open files”绝大多数是FD泄漏而非瞬时高峰,排查应按“看趋势、识异常、验调用、溯代码”四步:先用轻量脚本秒级定位高FD进程,再查其软限制与全局file-nr余量;接着用lsof分析FD类型分布(如REG(deleted)、sock CLOSE_WAIT、anon_inode递增等),结合watch观察FD数是否持续增长;最后用perf trace或strace验证open/close是否成对执行,并关联Java/Python/Web常见泄漏点精准修复。

linux 系统中怎么排查进程句柄泄漏导致的系统报错故障

Linux 系统中出现“Too many open files”报错,绝大多数情况不是瞬时高峰,而是进程长期未释放文件描述符(FD)导致的句柄泄漏。排查核心是“看趋势、识异常、验调用、溯代码”,不靠猜,靠可观测数据。

快速定位高句柄嫌疑进程

先别进代码,用系统工具秒级锁定目标:

  • 按打开 FD 数从高到低列出所有进程:
    for pid in /proc/[0-9]*; do p=$(basename $pid); c=$(ls -1 "$pid/fd" 2>/dev/null | wc -l 2>/dev/null); [ "$c" -gt 100 ] 2>/dev/null && echo "$p $c"; done | sort -k2 -nr | head -10
    比 lsof | awk 更轻量,避开 lsof 自身开销干扰
  • 确认该进程软限制是否已卡死:
    cat /proc/<PID>/limits | grep "Max open files"
    若 soft limit 是 1024,而当前 fd 数已达 1020,哪怕系统 file-max 是千万级,它也会报错
  • 检查全局资源余量:
    cat /proc/sys/fs/file-nr
    三列值中第二列代表“已使用但未释放”的 FD 总数;若接近第三列(file-max),说明系统级真紧张

深入分析 FD 类型与行为模式

找到 PID 后,重点不是数量,而是“开的是什么、怎么开的、为什么没关”:

Browser Setup (No-Root Linux)
Browser Setup (No-Root Linux)

在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...

下载
  • 统计 FD 类型分布:
    lsof -p <PID> -n | awk '{print $5}' | sort | uniq -c | sort -nr
    重点关注:
    – 大量 REG + 路径含 (deleted):文件被 unlink 但句柄未 close,磁盘空间不释放
    – 持续递增数字 FD(如 1024r、1025w…)+ 同一路径前缀:日志轮转或配置文件反复 open 未复用
    – 大量 anon_inode(如 eventfd、timerfd、epoll):常对应未退出的事件循环或线程池未 shutdown
    – sock + ESTABLISHED 但无业务连接池逻辑:HTTP 客户端未关闭 response body 或 socket 未 shutdown
  • 观察 FD 数动态变化:
    watch -n 1 'ls /proc/<PID>/fd/ 2>/dev/null | wc -l'
    持续 +1 或跳变(如每 3 秒 +2)即为强泄漏信号;稳定不动可排除

验证系统调用是否成对执行

人肉扫代码效率低,直接抓运行时行为:

  • 用 perf 实时跟踪 open/close:
    perf trace -e syscalls:sys_enter_openat,syscalls:sys_enter_close -p <PID>
    看到 openat 返回 fd=1024,但后续长时间无对应 close(fd=1024),就是泄漏铁证
  • 备选 strace(适合调试环境):
    strace -p <PID> -e trace=open,openat,close,closefrom 2>&1 | grep -E "(open|close)"
    加 -v 可见参数,比如 openat(AT_FDCWD, "/tmp/log_20260924.txt", …) → 1024
  • 特别注意 fork 场景:
    C/C++ 进程若子进程不操作父进程 FD,又没设 FD_CLOEXEC,这些 FD 就变成“幽灵句柄”,lsof 在父进程里看不到,却真实占用

关联业务与常见泄漏点

结合应用类型,直击高频漏洞:

  • Java 应用:
    – try-with-resources 对 JNI 创建的 socket、eventfd 无效
    – FileInputStream/ZipInputStream 忘记 close,尤其在异常分支中
    – 数据库连接未归还连接池,或连接池 maxIdle/maxWait 配置不合理
  • Python/Node.js:
    – open() 缺少 with 上下文,或循环中反复打开日志文件未缓存 handler
    – Node.js 的 fs.createReadStream() 未监听 close 或 error 事件就销毁引用
  • Web 服务:
    – Nginx/Tomcat 的 keepalive_timeout 过长 + 客户端异常断连,导致大量 CLOSE_WAIT 堆积
    – HTTP 客户端(如 OkHttp、Requests)未显式 .close() response body

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

437

2023.08.15

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

880

2023.09.08

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2592

2023.09.19

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

876

2023.10.09

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

769

2023.10.17

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

394

2023.10.17

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2356

2023.10.18

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

4332

2023.10.20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

20

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn