嵌入式linux设备内存泄露排查思路

张开发
2026/4/16 7:31:19 15 分钟阅读

分享文章

嵌入式linux设备内存泄露排查思路
文章目录引言:一、快速确认二、定位泄露源(内核态/用户态)2.1 检查内核内存2.2 检查用户态进程三、使用工具排查泄露点四、修复与验证引言:设备自己跑着跑着突然挂死了,还是靠看门狗给救回来了。这种时候,一定要考虑是不是内存泄露导致内存耗尽了。那我们来看看内存泄露点该如何快速确定和定位吧?整体思路就是确认现象 - 定位泄漏源(内核态/用户态)- 使用专业工具精排查泄露点 - 修复并验证。一、快速确认首先我们要确认是否存在内存泄露,排除内存正常消耗(如缓存、缓冲区增长)。观察系统整体内存趋势:使用free -h和top命令,长时间观察used内存或available内存是否持续增长,即使系统负载平稳。观察进程级内存:使用top或ps aux,关注RES(常驻内存)和VIRT(虚拟内存)字段,看特定进程的内存是否只增不减。二、定位泄露源(内核态/用户态)2.1 检查内核内存查看/proc/meminfo,掌握内存全局变化趋势。先读一次,等一段时间再读一次,对比变化。# 把/proc/meminfo的内容写到meminfo_start.txt里cat/proc/meminfomeminfo_start.txt# 等一段时间,把/proc/meminfo的内容写到meminfo_end.txt里cat/proc/meminfomeminfo_end.txt# 可以用diff命令对比,或者用beyond compare对比以下diffmeminfo_start.txt meminfo_end.txt虽然返回了很多东西,但是我们一般只需要关注:MemAvailable是否一直在减小,减小说明可用的内存一直在减少,可能存在泄露。Slab是否一直在增加,说明可能存在内存泄露。下面也附上所有项目的含义:MemTotal: 系统总内存的大小(单位:kB)。 MemFree: 当前可用的空闲内存的大小(单位:kB)。 MemAvailable: 估算的可以被新启动的应用程序使用的内存量(单位:kB),比 MemFree 更加准确反映实际可用内存。 Buffers: 用作缓存页缓冲区的内存大小(单位:kB)。 Cached: 用作页缓存的内存大小(单位:kB),用于存放已打开文件的数据。 SwapCached: 已经被交换出来但仍然在交换缓存中的内存大小(单位:kB),如果需要,可以很快地被换回内存中。 Active: 最近使用过的内存大小(单位:kB)。 Inactive: 最近未使用的内存大小(单位:kB)。 Active(anon): 最近使用的匿名内存大小(单位:kB),不包括文件页。 Inactive(anon): 最近未使用的匿名内存大小(单位:kB),不包括文件页。 Active(file): 最近使用的文件页内存大小(单位:kB)。 Inactiv

更多文章