首页 > 系统相关 >linux常用内存相关命令总结

linux常用内存相关命令总结

时间:2023-07-27 10:13:23浏览次数:52  
标签:总结 泄漏 跟踪 内核 linux 排序 KernelShark 内存


  • 查看某个pid占用物理内存的峰值
  • 内核内存泄漏常用工具
    • kmemleak
      • Kmemleak是Linux内核提供的一个内存泄漏检测工具(内核3.1.5之后得版本支持)。它通过在内核中跟踪动态分配的内存块,定期扫描内存,检测是否存在未释放的内存块。Kmemleak可以帮助定位内核中的内存泄漏问题
      • 前提条件:需要内核开启了CONFIG_DEBUG_KMEMLEAK选项(普通的 Linux 发行版,默认情况下可能没有启用 Kmemleak 功能)
      • 调试准备,加载memleak模块:sudo modprobe kmemleak(不一定可信)
      • 开启memleak扫描:echo scan > /sys/kernel/debug/kmemleak
      • 查看扫描结果:cat /sys/kernel/debug/kmemleak
        • 报告将包含未释放内存的地址、分配堆栈信息以及相关的对象和符号名称等。这些信息可以帮助你定位内存泄漏或者未释放内存的原因
      • 重置扫描结果:echo clear > /sys/kernel/debug/kmemleak
      • 注意事项:
        • 扫描时间长短取决于内核内存使用量
        • 建议在系统处于空闲状态下进行扫描操作,以减少误报和干扰

        • kmemleak只能检测到堆分配的内存泄漏,对于其他类型的资源泄漏(如文件描述符、锁等),无法提供完整的信息

        • 具体的kmemleak命令和路径可能会因Linux发行版或内核版本而有所不同,请根据你的实际情况来进行相应的调整

      • 参考链接:
    • slabtop
      • Slabtop是一个用户空间工具,用于监视和分析内核SLAB分配器的使用情况。通过运行slabtop命令,可以获得当前系统中各种SLAB缓存的信息,包括已分配和未释放的内存对象数量。通过分析这些信息,可以发现可能存在的内存泄漏问题
      • 一个Linux命令行工具,slab分配器是一种用于管理对象缓存的机制,它在内核中广泛使用;

      • 运行机制:默认情况下,slabtop会每隔五秒自动刷新一次显示的内容。可以观察对象数目和内存使用情况的变化
      • 使用方式:直接执行slabtop

      • 参数:
        • -o /--once : 只打印一次
          • slabtop -o|head -n 20:

        • -d/--delay <secs>: 更新的间隔
        • -s/--sort <char> : 排序方式
          • a:根据活跃对象个数排序
          • b:根据每个slab中的对象排序slab
          • c:根据cache大小排序slab
          • l:根据slabs个数排序
          • v:根据活跃slabs个数排序
          • n:根据名称排序
          • o:根据对象个数排序
          • p:根据每个slab的页面个数排序
          • s:根据对象大小排序
          • u:根据cache使用量排序
      • 结果查看:如缓存名称、对象数目、对象大小等。该信息将按照内存占用量进行排序,从最大的缓存到最小的缓存。
      • 值得注意的是,slabtop提供了很多选项和命令行参数,可以用于控制显示方式、排序方式和过滤条件等。可以在终端中输入 "man slabtop" 命令来查看所有可用的选项和参数以及它们的含义和使用方法。这将提供更多的功能和灵活性来满足特定需求。

    • Valgrind
      • Valgrind是一个功能强大的内存调试和性能分析工具。虽然它主要用于用户空间程序的调试,但它也可以应用于内核空间。通过在模拟执行的环境中进行内存分析,Valgrind可以帮助定位内核中的内存泄漏和其他内存错误;
      • Valgrind会在程序执行过程中对内存进行监视,并生成相应的报告。一旦程序执行完毕,Valgrind会显示报告的摘要信息,如内存泄漏数量、无效读写等。可以查看这些报告来定位问题所在。
      • 使用方式:valgrind --tool=memcheck ./your_program
      • 结果说明:根据Valgrind的报告,找到引起内存错误的代码行,并进行相应的修复。根据报告中提供的详细信息,可以确定具体的内存泄漏或错误类型,并采取适当的措施来解决问题。
      • 注意事项:Valgrind对目标程序的执行会产生一定的性能开销,并且可能会导致程序运行变慢。因此,在生产环境中一般不建议长期使用Valgrind,而是在开发和调试阶段使用它来检测内存错误。
    • AddressSanitizer
      • AddressSanitizer是一种内存错误检测工具,可以用于用户空间和内核空间的应用程序。它通过在编译时插入特殊的运行时检查代码来检测内存错误,包括内存泄漏。ASan可以帮助开发人员快速发现和修复潜在的内存问题 (会占用较多内存&影响系统性能,可作为test模式的一个编译选项,发包中一般不带)
    • kernelShark
      • KernelShark是一个用于可视化和分析Linux内核跟踪数据的工具。它可以帮助开发人员定位内存泄漏和其他性能问题,并提供图形化界面以便更好地理解内核行为(存储中使用可视化界面有点大材小用,只需要简单的跟踪即可,节省资源)
    • 基本使用
        • 安装KernelShark:首先要确保您的系统上已安装了KernelShark。你可以从官方网站(https://www.kernelshark.org/)或者通过包管理器来获取和安装KernelShark。
        • 收集内核跟踪数据:KernelShark需要分析内核跟踪数据文件,你可以使用Ftrace、perf等工具来收集内核跟踪数据。这些工具可以提供有关内核函数调用、事件持续时间等信息。
        • 打开KernelShark:打开终端并执行以下命令来启动KernelShark
        • 导入内核跟踪数据:在KernelShark界面中,选择“File”菜单,然后点击“Open Trace File”选项。浏览并选择你之前收集的内核跟踪数据文件,点击“打开”
        • 分析内核跟踪数据:一旦内核跟踪数据被导入,KernelShark将显示跟踪数据的各个事件和活动的时间线视图。你可以在此查看和分析内核调用、事件时间戳、进程切换等信息,以便深入分析内核行为和性能瓶颈。
        • 进一步探索:KernelShark提供了丰富的功能和可视化选项,例如过滤事件、搜索功能、标记重要事件等。你可以通过菜单栏和工具栏中的选项来进一步探索和定制显示方式,以满足你的分析需求。

      请注意,使用KernelShark需要一定的内核跟踪数据分析经验,并理解基本的内核概念和调试技术。此外,对于大型和复杂的内核跟踪数据,可能需要进行合适的过滤和缩放,以获得更有用和易读的结果。

      希望这些步骤对您有所帮助,让您能够开始使用KernelShark进行内核跟踪数据分析。

  • Page_owner

 

标签:总结,泄漏,跟踪,内核,linux,排序,KernelShark,内存
From: https://www.cnblogs.com/baihh/p/16903497.html

相关文章

  • java启动jar包修改JVM默认内存问题
    JVM默认物理内存JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每......
  • pgsql备份工具:pg_rman在Linux下的安装、设置与使用
    https://blog.csdn.net/Absurdreal/article/details/128872628?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-8-128872628-blog-128017299.235%5Ev38%5Epc_relevant_sort&depth_1-utm_sou......
  • 学好Linux的必经之路
    学好Linux的必经之路学习动机的培养对于一个人学习习惯的形成有着重要的作用。当我们在学习某一个事物时,建立属于我们自己的学习方法,以此培养我们学习Linux系统的学习动机。当前,Linux系统属于热门的计算机操作系统,因此学习Linux显得重要起来。同时,学习Linux可以让我们在计算机领域......
  • 智能制造之路—从0开始打造一套轻量级MOM平台之基础平台搭建(Linux部署)
    一、前言前面我们选定了Admin.net来搭建我们的MOM快速开发平台,本章主要描述.NET6平台的Linux部署,以及记录搭建过程中坑。本次搭建我们选择某云的轻量应用服务器,系统选择CentOS7.6,数据库使用Mysql。参考配置如下: 二、搭建Linux管理工具系统搭建完毕,我们使用宝塔来管理linux......
  • 正点原子Ubuntu入门012---Linux C编程
    一、编写C语言程序Ubuntu中编写和编译是分开的,一般使用vim编辑器编写程序,或者使用vscode编写;使用gcc进行编译设置vim编辑器,一个Tab=4字节使用vi打开文件/etc/vim/vimrc,在此文件最后输入以下代码setts=4  设置vim编辑器,显示行号 测试案例:1#include......
  • Linux之引导和服务
    目录1.1Linux的组成1.1Linux的组成kernel内核rootfs包括程序和glibc库操作系统存储在硬盘光驱或U盘网络的远端机器GRUB统一启动加载器加载操作系统加电自检检测硬件是否有故障如果无故障就去bios中设置的第一个启动项找操作系统第一启动是硬盘,MBR引导第一个......
  • 最短路模板总结
    最短路单源最短路所有边权都是正数朴素版Dijkstra算法(适用于稠密图)堆优化版Dijkstra算法(适用于稀疏图)存在负权边Bellman_Ford算法,用于仅存在负权边,并且对边数有限制Spfa算法对Bellman_Ford算法进行优化(容易被卡死)多源汇最短路可能不止一个起点,有很多询问,求任意......
  • 第一章 Linux系统编程
    Linux基础命令ctrl+l//快速清屏rm文件名//删除文件,rm*.o表示删除所有.o后缀的文件mkdir目录名//创建一个目录touch文件名//创建一个文件tree//查看文件目录树,但要sudoaotinstalltreell//查看所有文件cp–......
  • kernel源码(二十三)Bochs运行linux0.11
    1下载Bochshttps://sourceforge.net/projects/bochs/我下载的版本为Bochs-win64-2.7.exe,双击即可安装2运行linux0.112.1不使用配置文件http://oldlinux.org/Linux.old/images/下载如下两个镜像bootimage-0.11-20040305操作系统引导镜像,包含了操作系统启动引导程序和......
  • NLP句子相似性方法总结及实现
    目录1、基于Word2Vec的余弦相似度2、TextRank算法中的句子相似性3、莱文斯坦距离(编辑距离)4、莱文斯坦比5、汉明距离6、Jaro距离(JaroDistance)7、Jaro-Winkler距离(Jaro-WinklerDistance)8、基于Doc2Vec的句子相似度计算1、基于Word2Vec的余弦相似度首先对句子分词,使用Gens......