Linux内存查看通用方法(二): kernel空间

news2024/11/23 15:45:32

接上文:

Linux内存查看通用方法(一): user空间_红桃Jk的博客-CSDN博客_linux内存查看在嵌入式linux上,统计内存情况的一般方法https://blog.csdn.net/qq_34597963/article/details/126023451?spm=1001.2014.3001.5501

目录

一 linux整体内存分配

二 排除user空间内存泄露问题

三 确认kernel内存泄露问题

四 定位kernel泄露问题点


一 linux整体内存分配

1在user空间以外 ,还有linux的内存分配还会出现在kernel中

二 排除user空间内存泄露问题

1首先对内存使用情况进行确认,系统整体内存不断下降。 (linux : free 命令) 

2然后对各模块内存进行确认 

任意两次 内存比较,发现各模块内存存在变化,但没有内存泄漏现象,是正常的内存使用。 

并对各模块使用的内存值(VmRSS)进行求和,发现和Used总量有较大差值。 

如果 user空间发生泄露 调查方法参照

Linux内存查看通用方法(一): user空间_红桃Jk的博客-CSDN博客_linux内存查看在嵌入式linux上,统计内存情况的一般方法https://blog.csdn.net/qq_34597963/article/details/126023451?spm=1001.2014.3001.5501

当user空间的内存未看出明显泄露时,但linux整体的内存又在明显下降时

很大的可能是在kernel中出现了内存泄露

对于linux kernel 内存管理,也有一个malloc函数---->kmalloc。 

但linux kernel的内存申请,有一个slab系统(伙伴系统)进行总体分配。 

三 确认kernel内存泄露问题

1 slab系统也是linux 内存分配的一部分, 所以通过  cat /proc/meminfo 也可以查看到相关内容 

多次检测slab,发现slab确实在不断上涨,且和内存泄漏速度成正比例关系,因此确认和slab相关 

四 定位kernel泄露问题点

1 百度 linux slab 系统相关,linux也提供了相关方法 

  可以使用  cat /proc/slabinfo  查看总体数值  (各列含义可以自行百度) 

 然后对长时间观测相关变化,短时间内大量频繁变化的对象为 kmalloc-256 

2 对于 slab内各对象的详细使用情况,可以在  /sys/kernel/slab中进行查看 

进入 kmalloc-256  

有三个关键项  ①alloc_slab   ②free_slab  ③trace  通过这三项可以具体查看内存使用及释放情况 

3  查询此三项内容,首先应该打开linux kernel相关功能,需要重新配置 menuconfig ,否则无法cat出相关内容 

方法大致如下: 

通过 bitbake linux-telechips -f -c menuconfig 改变menuconfig 

搜索 slub kmem,将相关内容状态修正为Y 

4  修改完了后 在编译烧写后重新对机器进行测试。 

然后 cat /sys/kernel/slab/kmalloc-256/alloc_calls  可以查看 相关申请此区域的调用履历 

通过上图 可以看到   devm_pinctrl_get  调用次数最多 大概率是此项导致内存泄漏,pid =902 之后会用到 

 然后我们也查看一下 free_slab 的调用履历,发现没有释放此处相关的内容 

首先打开 trace log开关 

然后使用 dmesg 查看kernellog 

就会看到输出大量的的 trace log   , 

此时搜索关键词 PID 902, 可以确认他是进程 EdaTunerApplica 间接申请的内存 

我们反过来查看 Tuner的进程 主进程PID 为 837 

其下的全部线程ID 如下  也可以看到 子线程902,并能看到它在持续运行,连续运行时机达到42s 确实消耗了大量的内存 

通过结合具体的 call trace,我们可以确认内存使用是具体的函数调用履历(driver下) 

 在 kernel代码中 grep 查找相关函数内容 

其中 spi_tcc这个文件比较嫌疑比较大, 

查看相关变更内容 

5  原因确认

对于驱动函数 devm_pinctrl_get  必须配对使用 devm_pinctrl_put.  但是从代码中我们仅能看到get,没有put进行释放 

tuner每次发送数据时都会调用此函数,只要tuner有声音出力,就会发生内存泄漏问题。 

最后kill 掉tuner后或将增加释放相关函数,再进行实验,内存不再泄露,问题不在发生 

确认原因和分析一致 

参考网址 

深度探究Linux内存中的/proc/meminfo参数 - 知乎 (zhihu.com)

一个驱动导致的内存泄漏问题的分析过程(meminfo->pmap->slabtop->alloc_calls) (bbsmax.com)

(153条消息) 【内存管理】【slab】/sys/kernel/slab/<slab name>/trace解析_Evan_ZGYF丶的博客-CSDN博客

slab申请释放和追踪 - 知乎 (zhihu.com)

一个驱动导致的内存泄漏问题的分析过程(meminfo->pmap->slabtop->alloc_calls) - ArnoldLu - 博客园 (cnblogs.com)

linux通过meminfo 与 slab 定位内存泄漏 - 简书 (jianshu.com)

linux kernel内核slab内存泄露debug经验 - 编程之家 (jb51.cc)

(153条消息) 内存泄露调试分析(一)_Robin.Yin的博客-CSDN博客_sunreclaim

(153条消息) Kmemleak检测工具介绍_Fybon的博客-CSDN博客

(153条消息) 内存管理四 内存泄漏检测kmemleak_frank_zyp的博客-CSDN博客

(153条消息) meminfo与vmallocinfo实例_hbcbgcx的博客-CSDN博客_/proc/vmallocinfo

(153条消息) Linux:/proc/meminfo参数详细解释_coldice0521的博客-CSDN博客_/proc/meminfo

linux内存管理中的SLAB分配器详解 - 今日头条 - 电子发烧友网 (elecfans.com)

(153条消息) top、ps命令查看进程中的线程方法_奇妙之二进制的博客-CSDN博客_top查看进程的线程

(153条消息) top和ps查看线程_lanhuazui10的博客-CSDN博客_ps 查看线程

linux 怎么查看一个进程的所有线程_百度知道 (baidu.com)

参考脚本 

#!/bin/bash 

a=1 

 echo "8 > /proc/sys/kernel/printk"  

while [ $a -eq 1 ];do 

  

echo "########################" 

echo `date "+%Y-%m-%d %H:%M:%S"` 



echo "free" 

free -h 


for pid in `ls -1 /proc/ | egrep "[[:digit:]]"`;  

do if [ -f "/proc/$pid/status" ];  

then proc_name=`grep '^Name' /proc/$pid/status | awk '{print $2}'`;  

mem_VmPeak=`grep '^VmPeak' /proc/$pid/status | awk '{print $2}'`;  

mem_VmRSS=`grep '^VmRSS' /proc/$pid/status | awk '{print $2}'`; 

mem_VmSize=`grep '^VmSize' /proc/$pid/status | awk '{print $2}'`; 

mem_VmData=`grep '^VmData' /proc/$pid/status | awk '{print $2}'`; 

if [[ $mem_VmPeak != "" ]]; then echo "]$proc_name] VmPeak : ]$mem_VmPeak] kB VmRSS : ]$mem_VmRSS] kB VmSize : ]$mem_VmSize] kB VmData : ]$mem_VmData] kB"; 

fi 

 fi 

 done 


 echo "meminfo" 

cat /proc/meminfo 


echo "slabinfo" 

cat /proc/slabinfo 



 echo "########################" 

 sleep 30s 

 done 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用 CSS 从零写一个时间轴效果

时间轴效果介绍 在前端开发中,我们会遇到一些场景特别适合用时间轴来展示,例如下面按照日期时间来记录发生的事件: 还可以做成下面这种比较流行的左右对称卡片风格的时间轴: 如果再稍加装饰,还能有更加高大上的效果&a…

跨域的部分理解

1、跨域的原理 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的。 同源策略,是浏览器对 JavaScript 实施的安全限制,只要协议、域名、端口有任何一个不同,都被当作是不同的域。 跨域原理,即是通…

量子计算(十四):超导量子芯片

文章目录 超导量子芯片 超导量子芯片 超导量子计算是基于超导电路的量子计算方案,其核心器件是超导约瑟夫森结。超导量子电路在设计、制备和测量等方面,与现有的集成电路技术具有较高的兼容性,对量子比特的能级与耦合可以实现非常灵活的设计…

node.js按照和配置环境变量

下载地址 选择自己适合的版本 Download | Node.js 安装 傻瓜式安装就好了 安装完成后 查看是否安装成功 打开黑窗口 node -v npm -v 配置全局安装的模块路径和缓存路径 在nodejs根目录,创建node_global,node_cache文件夹 命令提示符 以管理员方式运行 我的目…

基于springboot疫情防控期间某村外出务工人员信息管理系统设计与实现的源码+文档

摘 要 网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合,利用java技术建设疫情防控期间某村外出务工人员信息管理系统,实现疫情防控期间某村外出务工人员信息的信息化。则对于进一步提高疫情防控期…

Oracle建表与创建序列

目录 一、简单建表 二、查看表结构(在Xshell中输入才能够执行) 三、设置自增序列 (一)普通自增序列 1.创建序列,oracle中没有自增,创建序列相当于等差数列自增 2.删除序列 3.建表的同时设置主键自增的步骤 (二)复杂序列 1.复杂序列模板 2.复杂…

架构设计(二):数据库复制

架构设计(二):数据库复制 作者:Grey 原文地址: 博客园:架构设计(二):数据库复制 CSDN:架构设计(二):数据库复制 在架…

100-数据结构与算法(下篇)

现在我们续写上一章博客的内容(即99章博客的内容) 快速排序: 同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的 不同的是,冒泡排序在每一轮中只把1个元素冒泡到数列…

彻底搞懂JavaScript防抖与节流

今天为大家带来一篇JS重难点的知识体系,这也是前端高薪必备的重难点知识,而且防抖与节流在各大企业前端面试过程中经常会考到的高频面试题! 为了更好的帮助大家理解防抖与节流,我们特意从我们的系统班(星辰班&#xff…

[阶段4 企业开发进阶] 6. Dubbo

文章目录1 基础理论1.1分布式基础理论1.2 发展演变1.3 RPC2 Dubbo2.1 基本概念2.2 Dubbo架构2.3 环境搭建Windows环境安装教程Linux环境安装教程3 案例演示3.1 需求分析3.2 工程架构分包粒度3.3 创建模块3.4 使用Dubbo配置版注解版4 监控中心4.1 安装4.2 监控中心配置5 整合Spr…

Java中的成员内部类

一、什么是成员内部类 成员内部类就是定义在外部类成员位置(属性/方法的位置)的类。成员内部类就是个成员。 二、为什么要有成员内部类 使用场景:除了它的外部类,不会被其他类使用,就可以使用成员内部类。有两种情况:1.不可能有…

大数据面试之Spark Core常见题目

大数据面试之Spark Core常见题目 1 Spark任务的划分 1、Application:初始化一个SparkContext即生成一个Application。 2、Job:一个Action算子会生成一个Job,有多个Action算子就有多个Job。 3、Stage:Stage等于宽依赖的个数加1…

特殊符号(一)—反斜杠 ” \ “(旋转光标和倒计时的实现)

特殊符号一.功能1.功能一:续航符2.功能二:转义符二.旋转光标和倒计时一.功能 1.功能一:续航符 顾名思义,就是连续的意思,主要用于换行的时候,看例子 以上是一个简单的判断语句,如果if里面的判断…

Win10十二月更新系统讲了什么?

微软今天凌晨发布了win10系统12月最新的累积更新补丁,根据该公司的公告,更新 KB5021233 将版本号增加到构建 19042.2364 (20H2)、19043.2364 (21H1)、19044.2364 (21H2) 和 19045.23…

01-35-springcloud-zk-eureka-consul-cap-父工程

01-springcloud-入门理论等: 微服务 1、什么是微服务 微服务是一种架构风格一个应用拆分为一组小型服务每个服务运行在自己的进程内,也就是可独立部署和升级服务之间使用轻量级HTTP交互服务围绕业务功能拆分可以由全自动部署机制独立部署去中心化&…

产品外观设计一一素描

在反映产品外观设计时,应根据产品的不同功能选择反映方法,以便更清晰地表达创作者的设计理念。首先,我们应该运用透视图的规律性来构建空间框架结构,将镜头中的许多外观元素有机地结合起来,并根据设计科学地安排镜头中…

Portal数据清理过程说明

Portal门户集成平台作为统一的门户搭建和展现平台,提供综合门户、信息门户、应用门户、数据门户等不同类型门户的建设能力,可以为企业构建门户网站、内部业务中心,同时对企业文档资料进行整合、统一归档,对内部、外部提供资料。通…

基于微信小程序的劳务咨询系统设计与实现-计算机毕业设计

项目介绍 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于劳务咨询服务平台小程序当然也不能排除在外,随着网络技术的不断成熟,带动了劳务咨询服务平台小程序&#xff0…

[附源码]计算机毕业设计第三方游戏零售平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

互联网电商大厂的分布式事务使用案例

事务的原子性、持久性可确保在一个事务内,更新多条数据都成功/失败。在一个系统内部,我们可以使用数据库事务来保证数据一致性。那如果一笔交易,涉及到跨多个系统、多个数据库的时候,用单一的数据库事务就没办法解决了。 在之前大…