100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Linux下内存泄漏定位方法

Linux下内存泄漏定位方法

时间:2023-03-14 00:01:34

相关推荐

Linux下内存泄漏定位方法

Linux下内存泄漏可分为用户空间的内存泄漏和内核空间的内存泄漏。

用户空间内存泄漏的查找方法:

第一步,查找内存泄漏的应用程序。

首先,写一个简单的内存泄漏程序(每秒钟泄漏4MB)umemleak.c:

#include <stdio.h>#include <malloc.h>#include <unistd.h>#include <string.h>int main(){char *ptr = NULL;while(1){ptr =(char *)malloc(sizeof(char) * 4*1024*1024);memset(ptr, 'a', sizeof(char) * 4*1024*1024);sleep(1);}return 0;}

编译:gcc umemleak.c -o umemleak

执行:./umemleak

另外打开一个终端,输入命令top,按Shift+M(以内存占用列排序)

说明:假设在不知道哪个程序存在内存泄漏的情况下,通过终端输入命令top,按Shift+M(以内存占用列排序),一段时间后,内存不断增长的应用程序,便可能是存在内存泄漏的应用程序。倘若任其内存泄漏,最终在耗尽系统内存时,该应用必然会被系统所杀死,泄漏掉的内存也会被系统所回收。系统中也就不存在这个进程了(除非设置了自动重启动)。

第二步,进入找到的内存泄漏应用程序源码,利用valgrind查找泄漏点。

关于valgrind工具查找内存泄漏,网上已有很多介绍。可参考:/qq_39478237/article/details/85239423?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161829340416780357231639%2522%252C%2522scm%2522%253A%25220713.130102334.pc%255Fall.%2522%257D&request_id=161829340416780357231639&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-4-85239423.pc_search_result_cache&utm_term=Linux%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E7%9A%84%E5%AF%BB%E6%89%BE

依然以umemleak.c为例,编译时加入 -g 调试选项:

gcc -g umemleak.c -o umemleak

执行:valgrind --tool=memcheck --leak-check=full --show-reachable=yes --trace-children=yes ./umemleak

即使是大型应用程序,通过以上的步骤,也一样可以找出内存泄漏的位置。

内核空间内存泄漏的查找方法:

1. 在内核参数bootarg中加入"kmemleak=on"

2.在.config中做如下配置:

CONFIG_HAVE_DEBUG_KMEMLEAK=yCONFIG_DEBUG_KMEMLEAK=yCONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=800

3. 挂载:mount -t debugfs none/sys/kernel/debug

如果一切顺利的话,你将能够在"/sys/kernel/debug/"下面看到kmemleak的文件。输入如下命令,让系统去检测内存泄露:

echo scan > /sys/kernel/debug/kmemleak

随后输入如下命令,查看系统检测到的内存泄露结果:

cat /sys/kernel/debug/kmemleak

kmemleak网上介绍也很多,可参考:/zhuyong006/article/details/83089407?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161829725016780261938963%2522%252C%2522scm%2522%253A%25220713.130102334.pc%255Fall.%2522%257D&request_id=161829725016780261938963&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-83089407.pc_search_result_cache&utm_term=kmemleak+release%E7%89%88%E6%9C%AC

注:kmemleak存在误报的几率,但可作为一个内核空间内存泄漏查找的不错的参考工具。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。