linux内存泄露分析

目录

内核态内存泄漏查询:

检查内存泄漏的方法 -- Kernel Space

用户态内存泄露

内存查询常用指令


用惯了大内存处理器,最近因项目原因接触小内存的处理器。才有机会在内存泄露分析上认真学习下:

内核态内存泄漏查询:

vmalloc

分配大块内存,走budy system;通过cat/proc/vmallocinfo可以统计;

注:Cat vmallocinfo,如果有buffer块数一直在增加,则是内存泄露。

kmalloc/kmem_cache_create

分配小于pagesize,走slab机制;通过cat /proc/meminfo里的slab字段可以统计。

注: 如果怀疑有kernel mode内存泄露,运行应用过程中每间隔一段时间cat/proc/meminfo留意slab。如果一直在增加,大概率有内存泄露的可能。具体模块的函数泄露可以用kmemleak debug。

检查内存泄漏的方法 -- Kernel Space


Linux kernel 2.6.31 之后,提供了 KMEMLEAK 的选项,可以拿来测试 kernel modules是否有 memory leakage,用法整理如下。

修改 .config 设定 KMEMLEAK,重新编译 kernel,重烧 image。

摘录 .config 如下:

# Memory Debugging

CONFIG_HAVE_DEBUG_KMEMLEAK=y

CONFIG_DEBUG_KMEMLEAK=y

CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
确认板子上的 kernel 已经提供 kmemleak的功能。


# mount -t debugfs nodev /sys/kernel/debug/

# cat /sys/kernel/debug/kmemleak
注:若存在 kmemleak,表示 kernel 已经支援 kmemleak

用法举例

图2-1


cid:image003.png\@01D2DB8B.2E89DE10
注:若沒有手动执行 scan,系统每10分钟自动扫描一次 memory leakage.

实际测试 Driver memory leakage 的方法
# mount -t debugfs nodev /sys/kernel/debug/

# echo clear > /sys/kernel/debug/kmemleak

# run_your_driver_test_her

# echo scan > /sys/kernel/debug/kmemleak
 

用户态内存泄露

如果发现程序运行过程,meminfo里的Memfree有不断的减少,echo 3 > /proc/sys/vm/drop_cache也不会返回内存,大概率是有内存泄露。

在排除kernel space内存泄露的前提下,试试隔段时间观察cat /proc/PID/smap里每个so的堆。有一定机率能发现是哪个so内存泄露。

排查使用第三方工具分析内存泄露。dmalloc等等

内存查询常用指令

cat /proc/PID/status

cat /proc/meminfo

cat /proc/PID/maps

cat /proc/PID/smaps

cat/proc/vmallocinfo

这几条指令就不详细介绍了

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,应用内存分析内存分析是两个不同的任务。 应用内存分析主要是通过查看应用程序的内存使用情况,找出应用程序中存在的内存泄漏、内存溢出等问题,以优化应用程序的性能。可以使用工具如valgrind、gdb等。 内存分析则是对整个系统的内存使用情况进行分析,找出哪些进程或应用程序占用了过多的内存,从而优化系统的性能。可以使用工具如top、ps、free、vmstat、sar等。 下面简单介绍一些工具的使用方法: 1. valgrind:是一个开源的内存调试和性能分析工具,可以检测应用程序中的内存泄漏、越界访问、使用未初始化的内存等问题。使用方法:valgrind [options] your_program 2. gdb:是一个强大的调试器,可以用来调试C、C++等程序。使用方法:gdb your_program,然后输入命令run启动程序,再输入命令break设置断点,用命令print查看变量的值。 3. top:是Linux系统中常用的进程监控工具,可以实时查看系统的进程和资源使用情况。使用方法:在终端中输入top命令即可。 4. ps:也是Linux系统中常用的进程查看工具,可以查看进程的PID、进程名、进程状态等信息。使用方法:在终端中输入ps命令即可。 5. free:可以查看系统的内存使用情况。使用方法:在终端中输入free命令即可。 6. vmstat:可以查看系统的虚拟内存使用情况。使用方法:在终端中输入vmstat命令即可。 7. sar:可以查看系统的CPU、内存、磁盘等资源使用情况。使用方法:在终端中输入sar命令即可。 以上是一些常用的Linux应用内存分析内存分析工具,使用这些工具可以更好地了解系统和应用程序的内存使用情况,从而进行优化和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值