Linux 中怎么排查进程资源泄漏的性能问题

胖瑶小哥_5977

胖瑶小哥_5977

2026-10-17

501人浏览

原创

排查资源泄漏关键看“该不该涨、有没有停”,linux中最常泄漏的是文件描述符和内存,需按“现象定位→资源分析→行为验证”主线,结合fd分布、内存增长模式及调用行为追踪精准识别根因。

linux 中怎么排查进程资源泄漏的性能问题

排查进程资源泄漏,关键不是看“用了多少”,而是看“该不该涨、有没有停”。Linux 中最常泄漏的两类资源是文件描述符(FD)和内存,它们表现不同、排查路径也不同,但都遵循“现象定位 → 资源分析 → 行为验证”这一主线。

先盯住异常进程:用轻量命令秒级锁定目标

别一上来就跑 perf 或 lsof——这些工具自身会开销,可能干扰判断。先用系统原生接口快速筛出嫌疑对象:

  • 查高 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 200 ] && echo "$p $c"; done | sort -k2 -nr | head -5 ——比 lsof 快且不依赖外部工具
  • 查高内存进程:ps aux --sort=-%mem | head -5,重点关注 RES 持续上升、VIRT 明显大于 RES 的进程
  • 确认是否真卡限:cat /proc//limits | grep "Max open files" 看 soft limit 是否已逼近;cat /proc/sys/fs/file-nr 看第二列是否接近第三列(file-max)

区分泄漏类型:看 FD 分布或内存增长模式

数量只是表象,类型才是线索:

Linux Ai Server
Linux Ai Server

Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。

下载
  • FD 泄漏典型信号:lsof -p | awk '{print $5}' | sort | uniq -c | sort -nr 后重点看:
    – 大量 REG (deleted):文件被 unlink 但句柄未关,磁盘空间不释放
    – 大量 anon_inode(如 eventfd/timerfd):事件循环没退出、线程池未 shutdown
    – 大量 sock CLOSE_WAIT/ESTABLISHED 且无连接复用逻辑:HTTP 客户端没读完 response body、socket 忘关
  • 内存泄漏典型信号:watch -n 1 'cat /proc//status | grep -E "VmRSS|VmSize"' 观察 RSS 是否持续单向爬升;若 VmSize(VIRT)涨得快但 RSS(RES)几乎不动,大概率是 malloc 了但没 touch,属于虚占非实漏

验证调用行为:抓运行时 open/malloc 是否成对

代码没看全前,先让系统自己说话:

  • 对 FD 泄漏:perf trace -e syscalls:sys_enter_openat,sys_enter_close,syscalls:sys_enter_creat -p 实时跟踪打开/关闭动作,看是否有 open 多、close 少、或 close 失败的情况
  • 对内存泄漏:sudo cat /proc//maps | awk '$6 ~ /heap/ {print $1}' 找堆地址范围,再用 pstack 查当前调用栈,结合业务逻辑判断是否在反复 new/malloc 未 free
  • 生产环境慎用 Valgrind(性能降 10–50 倍),可优先用 gdb -p + info proc mappings + x/100xg 辅助观察堆内存碎片化程度

关联常见泄漏点:直奔高频根因

多数泄漏不是随机发生,而是落在几个经典场景里:

  • Java 进程:关注 jstat -gc 中老年代持续增长、Full GC 频次升高;检查 ThreadLocal 未 remove、静态集合类不断 add、NIO Direct Buffer 未 clean
  • Go 进程:用 go tool pprof http:///debug/pprof/heap 看 top alloc_objects;注意 goroutine 持有大对象、sync.Pool 误用、defer 中未释放资源
  • C/C++ 进程:检查日志轮转逻辑中 fopen 未 fclose、网络服务中 accept 后未 close client fd、异常分支遗漏 free、结构体内存未整体释放

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4050

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3453

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2653

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6450

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6102

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3553

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3025

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3259

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

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

共0课时 | 0人学习