Linux C/C++ 程序内存泄露排查

news/2024/11/25 21:21:10/

C/C++程序内存泄露排查

  • 前言
  • Linux系统内存泄露检查
    • 系统内存监控
    • 进程内存监控
  • 进程内存泄露点定位
    • 已有的内存泄露检查工具
    • 制作一个内存泄露检查工具

前言

由于C/C++程序可以动态申请内存,动态申请的内存位于程序的队区,如果程序比较复杂,程序员在编写代码的时候不小心,可能会存在申请了内存没有释放的情况,程序长期运行,会导致系统中用户程序可分配堆内存越来越少的,最终程序OOM崩溃。

Linux系统内存泄露检查

系统内存监控

/proc/meminfo 文件保存了系统内存使用情况,

MemTotal:       498364224 kB
MemFree:        341371712 kB
MemAvailable:   431430528 kB
Buffers:            3456 kB
Cached:         89801856 kB
SwapCached:            0 kB
Active:         36263872 kB
Inactive:       78312192 kB
Active(anon):   24965120 kB
Inactive(anon):   212352 kB
Active(file):   11298752 kB
Inactive(file): 78099840 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194240 kB
SwapFree:        4194240 kB
Dirty:               512 kB
Writeback:             0 kB
AnonPages:      24776320 kB
Mapped:           157504 kB
Shmem:            406720 kB
Slab:           11619072 kB
SReclaimable:    3734336 kB
SUnreclaim:      7884736 kB
KernelStack:       34128 kB
PageTables:        69632 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    240269120 kB
Committed_AS:   59814336 kB
VmallocTotal:   549755813888 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:       25165824 kB
CmaFree:        25165824 kB
HugePages_Total:   12800
HugePages_Free:    12800
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

其中 MemAvailable 可以用来评估系统当前应用程序可用的内存,定时监控该数据并显示出来便可得到系统内存使用曲线。

进程内存监控

系统可用内存一直减少时,说明系统中正在运行的程序有内存泄露,但还需要进一步确定是哪个程序在泄露。
/proc/{pid}/cmdline 里面记录了某一个进程(进程号为pid)的启动名称,这个名称就是进程的名字,因此遍历/proc文件夹下的所有进程文件夹就能找到与进程名字对应的进程PID。
/proc/{pid}/status 文件记录了进程的详细信息,其中 VmSize代表进程现在正在占用的内存,VmRSS是程序现在使用的物理内存,VmData:表示进程数据段的大小,Threads:表示当前进程中的线程个数,/proc/{pid}/smaps也存有进程更加详细的内存信息,Rss:是实际分配的内存,这部分物理内存已经分配,不需要缺页中断就可以使用的,Pss(proportional set size):是平摊计算后的实际物理使用内存(有些内存会和其他进程共享,例如mmap进来的)。以上数据对于进程内存监控和排查都具有重要意义

进程内存泄露点定位

已有的内存泄露检查工具

常用的内存泄露检查工具
Linux官方网站推荐的内存泄露检查工具

制作一个内存泄露检查工具


http://www.ppmy.cn/news/61183.html

相关文章

Java学习报培训班好还是自学好?

学习本身就是一件艰苦的事情,如果你想从事Java开发的岗位,还不能确定是自学和报培训班,可以先看一看以下这份自学和报班的优劣势分析,或许能帮你们更好地选择: 1.自学 优势:①自由,想什么时间…

Python 绘制狄拉克 delta 函数(完美实现)

Python 绘制狄拉克 delta 函数 引言自制方法scipy 内置函数方法plt.scatter() 函数绘制完美绘制 delta 函数引言 阅读这篇文章前,推荐优先阅读74—Python绘制不同表现形式的狄拉克delta函数(视觉上的delta函数)。之前我们提到了我们所绘制的 delta 函数只是视觉上的 delta …

Q-in-Q 和 MAC-in-MAC

例题引入: 1. 城域以太网在各个用户以太网之间建立多点第二层连接,IEEE802.1ad定义运营商网桥协议提供的基本技术是在以太网帧中插入(26)字段,这种技术被称为(27)技术。 (26)A.运营商VLAN标记…

为Linux系统添加一块新硬盘,并扩展根目录容量

我的原来ubuntu20.04系统装的时候不是LVM格式的分区, 所以先将新硬盘转成LVM,再将原来的系统dd到新硬盘,从新硬盘的分区启动,之后再将原来的分区转成LVM,在融入进来 1:将新硬盘制作成 LVM分区 我的新硬盘…

Python系列之Windows环境安装配置

目录 一、Python安装 1.1下载 1.2 安装 1.3增加环境变量 二、PyCharm安装 2.1 PyCharm简介 2.2 PyCharm下载安装 一、Python安装 1.1下载 python 官网The official home of the Python Programming Languagehttps://www.python.org/downloads/ 1.2 安装 要勾选选项 Ad…

基于springcloud实现的医院信息系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 医疗信息就诊系统,系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患者管理。诊疗活动由各工作站配合完成,并将临床信息进行整理、处理、汇总、统计、分析等。本系统包括以…

TypeScript 基础

目录 类型注解 TypeScript 类型概述 简单类型 数组类型 联合类型 自定义类型(类型别名) 函数类型 基本使用 void 类型 函数的可选参数 对象类型 对象中的属性类型 对象中的函数类型 对象的可选属性或方法 interface接口类型 基本使用 i…

软件项目生命周期模型

目录 瀑布模型 快速原型模型 敏捷模型 迭代模型(增量模型) 螺旋模型 瀑布模型 定义:早就计划好了,按计划顺序(计划、设计、开发、测试、维护)线性执行 适用于:需求明确、变化少的项目 缺…