IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux内存泄露分析 -> 正文阅读

[系统运维]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

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

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:41:37  更:2022-04-27 11:44:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:24:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码