原始笔记只记了两个关键词:
koom和strace。这里把它整理成一条最短可执行链路。
1. 优先工具
原始内容是:
koomstrace
整理后可以把两者分成两个阶段使用。
2. 第一阶段:先用 KOOM 缩小范围
如果当前环境里已经接入 KOOM 或类似 fd 监控能力,优先用它回答两个问题:
- fd 数量是否真的持续增长
- 增长主要集中在哪类对象或哪段业务路径附近
它更适合做“先发现问题、先缩小范围”,尤其是在 Android App 或长期运行进程里。
3. 第二阶段:再用 strace 跟系统调用
当你已经确认存在 fd 泄漏,或者需要进一步看“是谁打开了但没关”,再上 strace。
它更适合回答:
- 哪个线程 / 进程在频繁调用
open、socket、accept - 某些 fd 有没有对应的
close - 泄漏是否和某个固定文件、目录、socket 路径有关
4. 一个最小排查思路
把原始记录展开后,实际可以按下面顺序回看:
- 先确认现象
例如进程 fd 数量持续上涨,或已经逼近系统上限。 - 用 KOOM 或现有监控判断增长趋势
先确认是不是稳定复现,以及大概从哪个功能进入异常区间。 - 在可复现场景下补
strace
重点跟openat、close、socket、accept这类系统调用。 - 对照业务动作回放
看是否每做一次相同操作,就会新增一批没有释放的 fd。
5. 回看这篇时的提醒
- 监控工具负责“发现和缩小范围”
strace负责“确认系统调用层面的打开 / 关闭行为”- 如果线上环境不适合直接
strace,优先在可复现的测试环境复刻
FEATURED TAGS
Git
Cheat Sheet
Markdown
Tools
C++
Linker
Thread
Linux
TCP
Network
GDB
Debug
leetcode
链表
WSL
Ubuntu
Windows
Linux Kernel
GCC
Android
adb
Troubleshooting
Profiling
Sanitizer
glibc
MySQL
Database
Python
curl
Build
ELF
clang-format
CMake
Graphviz
Performance
vcpkg
Protobuf
排查
速查
内存
STL
调试
性能分析
性能
读书笔记
方法论
架构
网络
Timer
mbedTLS
TLS
安全
负载均衡
脚本
工具
LRU
二叉树
BST
中序遍历
回溯
二分查找
优先队列
排序
旋转数组
jenkins
部署