当前位置:首页>Linux>Linux开发必看|内存调试常用命令,从查看总量到排查泄漏全搞定

Linux开发必看|内存调试常用命令,从查看总量到排查泄漏全搞定

  • 2026-10-11 08:14:20
Linux开发必看|内存调试常用命令,从查看总量到排查泄漏全搞定
本文档介绍 Linux 开发过程中内存的常用命令,查看内存总大小信息、使用情况以及内存预留大小
1. total 内存信息
1.1 meminfo
cat /proc/meminfo
MemTotal: 1497696 kB      Memtotal = MemFree + Buffers + CachedMemFree: 590524 kBMemAvailable: 773252 kBBuffers: 768 kBCached: 216892 kBSwapCached: 14204 kBActive: 260884 kBInactive: 176744 kBActive(anon): 120620 kBInactive(anon): 106688 kBActive(file): 140264 kBInactive(file): 70056 kBUnevictable: 3224 kBMlocked: 3224 kBSwapTotal: 748844 kB      SwapTotal/SwapFree:是系统脚本中通过 swap 命令启用、分配SwapFree: 346156 kBDirty: 776 kBWriteback: 0 kBAnonPages: 220804 kBMapped: 194276 kBShmem: 4968 kBKReclaimable: 43900 kBSlab: 111060 kB             Slab 当前使用大小,如果增长太大可能内存泄漏SReclaimable: 40648 kB      Slab 可回收内存SUnreclaim: 70412 kB        Slab 不可回收内存KernelStack: 18496 kBPageTables: 42096 kBNFS_Unstable: 0 kBBounce: 0 kBWritebackTmp: 0 kBCommitLimit: 1497692 kBCommitted_AS: 41751048 kBVmallocTotal: 263061440 kB   Vmalloc 总大小VmallocUsed: 30368 kB        Vmalloc 已用大小VmallocChunk: 0 kBPercpu: 2528 kBCmaTotal: 532480 kBCmaFree: 0 kB                注:CMA 被系统借用,也属于被使用,CmaFree 会减小 
1.2 sysrq-trigger
sysrq-trigger 是 Linux 内核提供的紧急调试接口,不用重启就能获取系统底层信息。
echo m > /proc/sysrq-trigger
执行上述命令,内核会把所有内存统计数据打印出来
作用:排查内存泄漏、OOM(内存溢出)、系统卡顿、内核内存占用异常。

2 kernel 内存信息
2.1 slab
内核申请的内存调试接口,编译需要打开两个宏定义:
CONFIG_SLUB_SYSFS=yCONFIG_SLUB_DEBUG=y
统计 slab 总大小命令:
echo `cat /proc/slabinfo |awk 'BEGIN{sum=0;}{sum=sum+$3*$4;}END{printsum/1024/1024}'` MB
2.2 memblock
系统预留内存调试接口,编译需要在 bootargs 中添加 memblock=debug:
chosen {    bootargs = "earlycon=uart8250,mmio32,0xff570000 console=ttyFIQ0memblock=debug";};
2.3 zoneinfo
打印 Linux 内核内存物理分区(内存域 Zone)。
内存域(Zone):Linux 把物理内存按硬件寻址、用途分成多个区域,DMA、DMA32、Normal、HighMem、Movable,执行以下命令打印这些区域详细信息:
cat /proc/zoneinfo

3 空闲内存
3.1 free
total:内核页管理的总内存;
used:正在被使用的内存;
free:空闲的内存;
shared:共享的内存,如匿名页;
buffers:缓冲内存数;
cached:缓存内存数;
注:buffers是把分散写入操作保存到内存中,当达到一定程度集中写入硬盘;cached是读取数据保存到内存,当再次读取硬盘数据则直接从内存读取;

4 清除缓存
4.1 drop_caches
清空 pagecache
echo 1 > /proc/sys/vm/drop_caches
清空 dentries 和 inodes
echo 2 > /proc/sys/vm/drop_caches
清空所有缓冲(pagecache、dentries 和 inodes)
echo 3 > /proc/sys/vm/drop_caches

5 虚拟内存使用情况
5.1 vmallocinfo
执行以下命令查看:
cat /proc/vmallocinfo
5.2 vmstat
执行以下命令查看:
cat /proc/vmstat

6 内存压力
6.1 pressure
执行以下命令查看:
cat /proc/pressure/memory- VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)- RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)- PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)- USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

以上就是Linux开发中最常用的内存相关命令,如果你在使用这些命令时遇到疑问,或者有其他高频内存命令补充,欢迎在评论区留言交流,一起提升调试效率!

最新文章

随机文章