Linux内存泄漏排查思路

什么是内存泄漏

申请内存不释放,常见现象就是内存被耗完,导致死机或者有些程序被kill掉。

排查思路

了解内存分配过程,如下:
在这里插入图片描述
所以先看应用层有没有内存泄漏(1处),然后slab(2处),然后再看没有统计的(3处)。

查看进程使用的物理内存有没有一直增大:
while true; do ps -e -o pid,comm,%mem | sort -n -r -k 3 | head -n 10 ;echo “----------”; sleep 1; done

查看slab有没有一直增大:
while true; do cat /proc/slabinfo | awk ‘{name=$1; size=$2*$4/4096; printf “%s %lu\n”, name, size;}’ | sort -n -r -k 2 | head -n 20; echo “--------------”; sleep 1;done;

查看没有统计的有没有增大:
while true;do cat /proc/meminfo | awk ‘{if($1==“Active:” || $1==“Inactive:” || $1==“Unevictable:” || $1==“Slab:” || $1==“KernelStack:” || $1==“PageTables:”) u+=$2; if($1==“MemTotal:”) used+=$2; if ($1==“MemFree:”) used-=$2;}END{print used-u}’; sleep 1;done

找到异常的,进行细节排查

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 内存泄漏排查的方法有很多种,这里介绍一些常用的方法: 1. 使用 Valgrind 工具:Valgrind 是一个强大的开源工具集,可以用来检测内存泄漏、越界访问、使用未初始化的内存等问题。使用 Valgrind 工具可以非常方便地发现内存泄漏问题,具体使用方法如下: ```bash valgrind --leak-check=full ./your_program ``` 这条命令会在运行你的程序时启动 Valgrind 工具,并检查程序中的内存泄漏问题。Valgrind 工具会输出详细的检查结果,包括内存泄漏的位置、大小等信息。 2. 使用 GNU glibc 内存泄漏检测:GNU glibc 是 Linux 系统中常用的 C/C++ 库,它提供了一些内存泄漏检测的函数。具体使用方法如下: ```c++ #include <mcheck.h> int main(int argc, char* argv[]) { mtrace(); // your code here muntrace(); return 0; } ``` 这段代码会在程序启动时调用 `mtrace()` 函数,启用内存泄漏检测功能。在程序结束时,调用 `muntrace()` 函数来关闭检测功能。通过这种方法,可以在程序运行时检查内存泄漏问题,并输出相应的检测结果。 3. 手动检查代码:手动检查代码是一种比较耗时、费力的方法,但是可以帮助程序员深入了解程序的内部实现。具体方法是,在程序中添加日志输出或者调试信息,记录每个内存分配和释放的位置、大小等信息,然后分析这些信息来确定是否存在内存泄漏问题。 需要注意的是,内存泄漏只是 Linux 内存管理中的一个问题,还有很多其他问题也需要注意,比如内存越界访问、使用未初始化的内存等问题。因此,在开发程序时,应该注意遵循良好的编程习惯,确保程序的健壮性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值