Linux下内存统计和内存泄露类问题的定位方法
作者:网络转载 发布时间:[ 2013/4/11 10:39:53 ] 推荐标签:
在产品的开发中,通过对当前系统消耗内存总量的统计,可以对产品所需内存总量进行精确的评估,从而选择合适的内存芯片与大小,降低产品的成本。在遇到内存泄露类问题时,经常会对此束手无策,本文通过对proc下进程相关的文件进行分析,精确评估系统消耗内存的大小,还可以对内存泄露类问题的解决提供一种定位手段。
Linux在内存使用上的原则是:如果内存充足,不用白不用,尽量使用内存来缓存一些文件,从而加快进程的运行速度,而当内存不足时,会通过相应的内存回收策略收回cache内存,供进程使用。
一、系统总内存的分析
可以从proc目录下的meminfo文件了解到当前系统内存的使用情况汇总,其中可用的物理内存=memfree+buffers+cached,当memfree不够时,内核会通过回写机制(pdflush线程)把cached和buffered内存回写到后备存储器,从而释放相关内存供进程使用,或者通过手动方式显式释放cache内存:
echo 3 > /proc/sys/vm/drop_caches
下图是海思平台下当前系统内存的总体使用情况,其中可以看到,系统消耗掉了29M的内存,下面继续分析这些内存都是被谁消耗掉了。
# cat /proc/meminfo
MemTotal: 68956 kB
MemFree: 18632 kB
Buffers: 4096 kB
Cached: 17260 kB
SwapCached: 0 kB
Active: 21304 kB
Inactive: 19248 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 19216 kB
Mapped: 2472 kB
Slab: 6900 kB
SReclaimable: 924 kB
SUnreclaim: 5976 kB
PageTables: 460 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 62060 kB
Committed_AS: 28864 kB
VmallocTotal: 442368 kB
VmallocUsed: 46984 kB
VmallocChunk: 393212 kB
二、进程使用内存的统计
在32位操作系统中,每个进程拥有4G的虚拟内存空间,其中0~3GB是每个进程的私有用户空间,这个空间对系统中其他进程是不可见的。3~4GB是linux内核空间,由系统所有的进程以及内核所共享的。通过访问/proc/{pid}/下相关文件,可以了解每个线程虚拟内存空间的使用情况,从而了解每个线程所消耗内存的多少。
由于我们的产品都是使用多线程方式实现的,多个线程共享一个进程的用户态虚拟地址空间,虚拟地址空间包含若干区域,主要有如下几个区域:
1、当前执行文件的代码段,该代码段称为text段。
2、执行文件的数据段,主要存储执行文件用到的全局变量,静态变量。
3、存储全局变量和动态产生的数据的堆。
4、用于保存局部变量和实现函数调用的栈。
5、采用mmap方式映射到虚拟地址空间中的内存段
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11