背景

FD 用量不断上升,最终表现可能是无法建立连接,也可能是日志写入失败。需要先分清增长的是文件、socket 还是管道。

核心判断

  1. 按时间采集数量和符号链接目标,区分正常连接池与泄漏。
  2. 沿着打开、移交、关闭三个动作检查资源所有者。
  3. 重点覆盖错误分支、重试循环和提前返回。

最小示例

下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。

pid=$(pidof app); printf 'total='; find "/proc/$pid/fd" -mindepth 1 -maxdepth 1 | wc -l; ls -l "/proc/$pid/fd" | head

边界与误区

提高 ulimit 只延迟触顶,不能修复泄漏。短暂连接峰值也不是泄漏证据,必须与请求量和回收过程对照。

验证方式

固定负载运行一段时间再停止,确认 FD 回落。采集 /proc 需要相应权限,示例的 pidof 单实例假设在多进程环境应改成逐 PID 处理。

小结

按进程统计 FD 总数和目标类型,沿着增长曲线寻找没有闭合的资源生命周期。