需要立刻提高警觉的 FD 行,通常有这么几类:一是持续递增的数字,比如1024r、1025r;二是 TYPE=REG 且 NAME 中带有(deleted);三是 TYPE=anon_inode/pipe,且数量和线程数明显强相关;四是 TYPE=sock、STATE=ESTABLISHED,但业务逻辑里又找不到对应连接;五是 TYPE=DIR 指向临时目录;六是 NAME 为空,或者直接显示为 socket:[xxx]。

Linux怎么查看具体的文件句柄泄漏追踪记录

lsof -p PID 输出里哪些 FD 行值得立即警惕

正常进程的 FD 列集中在 0u1w2wcwdmemDEL 或少量数字(如 15u)。一旦发现以下模式,基本可判定存在泄漏:

为什么单次 lsof 看不到泄漏,但 still get “Too many open files”

这是最易踩坑的点:lsof 默认只显示当前打开的句柄,但某些泄漏是“瞬时创建 + 长期持有”,而 lsof 快照无法捕捉趋势。更关键的是:lsof 本身可能因 DNS 解析卡住,导致输出失真或漏项。

怎么用 /proc/PID/fd 验证 lsof 没显示的句柄

lsof 有时会过滤掉某些内核抽象资源(比如部分 anon_inode 或容器环境中的 fd),而 /proc/PID/fd/ 是内核直接暴露的符号链接视图,更真实、无过滤。

定位到泄漏源头后,怎么确认是不是代码没关资源

光看出现在哪类 fd 不够,得确认它是否真的来自你控制的代码路径。很多泄漏藏在标准库封装之下,比如 Files.list()ZipInputStream、HTTP 客户端默认连接池、甚至日志框架的异步刷盘线程。

真正难的不是发现 fd 在涨,而是确认那个 socket:[1234567]anon_inode:[eventpoll] 谁创建的、谁该负责关、为什么没关。这时候 lsof/proc/PID/fd/ 只是入口,最终还得靠代码上下文和资源生命周期契约。
本文转载于:https://www.php.cn/faq/2987787.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。