Linux脚本 -- 监控用户态程序的内存分布

程序内存监控脚本使用说明

本文档旨在详细介绍如何使用特定的Shell脚本来监控Linux环境下一个应用程序的内存使用情况,并记录其变化。

脚本概述

脚本通过不断检测特定应用程序的内存映射,并对比连续两次的结果,如果发现有变化,则将差异输出到mem.diff文件中。这对于开发者调试应用程序或监控应用程序在运行期间内存泄漏非常有用。

脚本代码

#!/bin/shrm -rf ./A ./B mem.diff
APPNAME=$1if [ "x${APPNAME}" == "x" ];thenAPPNAME=cmapp
fiecho "Listen to ${APPNAME} !"while [ 1 ];
dopmap -x `pidof ${APPNAME}` | sort -n -k 1 -r &> A;if [ ! -f ./B ];thencp -f ./A ./BfiTMP=`diff ./A ./B`if [ "x${TMP}" != "x" ];thenecho -e "===================
" >> mem.diffecho -e "${TMP} 
" >> mem.diffecho -e "-------------------
" >> mem.diffmv ./A ./Bfisleep 1;
done

脚本详细解释

  1. 初始化和参数处理

    • 脚本开始时,首先清理可能存在的旧文件(A, B, mem.diff)。
    • 接收第一个命令行参数作为监控的应用程序名称(APPNAME)。如果未提供,则默认为cmapp
  2. 监控循环

    • 无限循环,每次循环都执行一次内存映射检查。
    • 使用pmap -x命令来获取指定进程的内存映射,这里pidof ${APPNAME}用于获取应用程序的进程ID。
    • 结果被重定向和排序后存储在文件A中。如果是首次循环,将A复制到B以用作后续比较。
    • 使用diff命令比较文件A和B的内容,如果存在差异,则将差异追加到mem.diff文件中,并更新B文件为最新的内存映射状态。
  3. 记录和延迟

    • 如果检测到内存映射有变化,则在mem.diff文件中用特定格式记录下来,并在每次检测间隔1秒,以减少系统负荷。

使用方法

  • 执行脚本时,可以传递一个参数,即要监控的应用程序名称。如不传递参数,则默认监控cmapp
  • 脚本需要运行在具有相应权限的环境中,以便能正确使用pmappidof命令。

结论

此脚本提供了一种有效的方式来监控和记录Linux应用程序的内存使用情况,特别适用于开发和测试阶段的性能分析。

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

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

相关文章

高精度数据采集模块8路16位模拟量输入

M160E以太网远程I/O无线数据采集模块是一款工业级、隔离设计、高可靠性、高稳定性和高精度数据采集模块,嵌入式32位高性能微处理器MCU,集成2路工业10/100M自适应以太网模块里面。提供多种I/O,支持标准Modbus TCP,可集成到SCADA、O…

学习的体会,献给刚刚接触编程的你(7)

距离我上次更新博客时间有一年多了,中间我总是挣扎与颓废,博客一直没有更新。每天的工作占据了自己大量的时间,感觉自己没有生活感,自己就如同一个不能停止的机器一样,内耗严重,同时也没有获得任何成就感。 也许你现在…

基于FPGA实现的HDMI TO MIPI扩展显示器方案

FPGA方案,HDMI IN接收原始HDMI 信号,输出显示到LCD 屏上 客户应用:扩展显示器 主要特性: 1.支持2K以下任意分辨率显示 2.支持OSD 叠加多个图层 3.支持MIPI/EDP/LVDS/RGB屏 4.支持放大缩小匹配屏分辨率 5.零延时,输…

[力扣题解]77. 组合问题

题目&#xff1a;77. 组合 思路 回溯法 调试用代码 // 调试用 // 理解不了减枝那个值怎么设置的 class Solution { private:int order 0;vector<vector<int>> result; // 存放符合条件结果的集合vector<int> path; // 用来存放符合条件结果void backtra…

算法训练营day52,204. 计数质数

204. 计数质数 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;4 解释&#xff1a;小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2&#xff1a; 输入&#xff1a;n 0 输出&#xff1…

《ESP8266通信指南》15-MQTT连接、订阅MQTT主题并打印消息(基于Lua|适合新手|非常简单)

往期 《ESP8266通信指南》14-连接WIFI&#xff08;基于Lua&#xff09;-CSDN博客 《ESP8266通信指南》13-Lua 简单入门&#xff08;打印数据&#xff09;-CSDN博客 《ESP8266通信指南》12-Lua 固件烧录-CSDN博客 《ESP8266通信指南》11-Lua开发环境配置-CSDN博客 《ESP826…

Java面试题:什么是栈内存?它在Java中扮演什么角色?

在计算机科学中&#xff0c;栈内存&#xff08;Stack Memory&#xff09;是一种特殊的内存区域&#xff0c;用于存储程序运行时的局部变量、函数参数以及返回地址等信息。栈内存与堆内存&#xff08;Heap Memory&#xff09;相对&#xff0c;后者主要用于存储程序中动态分配的对…

【前端基础】CSS样式+Vue中绘制时间轴

深度选择器 在 Vue.js 中&#xff0c;/deep/、>>>、:deep 和 ::v-deep 这些都是深度选择器&#xff0c;用于修改子组件的样式。它们主要用于解决作用域样式和组件样式之间的冲突问题。 1. /deep/ 或 >>> /deep/ 和 >>> 是相同的选择器&#xff0c;…

2024OD机试卷-机器人搬砖 (java\python\c++)

题目:机器人搬砖 题目描述 机器人 搬砖,一共有 N 堆砖存放在 N 个不同的仓库中,第 i 堆砖中有 bricks[i] 块砖头,要求在 8 小时内搬完。 机器人每小时能搬砖的数量取决于有多少能量格,机器人一个小时中只能在一个仓库中搬砖,机器人的能量格只在这一个小时有效,为使得机…

【智能算法】正切搜索算法(TSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2022年&#xff0c;A Layeb受到正切函数启发&#xff0c;提出了正切搜索算法&#xff08;Tangent Search Algorithm, TSA&#xff09;。 2.算法原理 2.1算法思想 TSAT基于正切函数的数学…

vue3对象数组格式的动态表单校验

如你有一个表单&#xff0c;表单内容是对象&#xff0c;但是对象内还有可动态循环的数组进行动态表单校验。 效果如图&#xff1a;查看源码 页面内容&#xff1a; <div class"arrForm-Box"><el-form :model"state.formData" :rules"rule…

mysql数据库调优篇章1--日志篇

目录 1.认识数据库中日志的作用2.增加mysql数据库中my.ini 基本配置3.增加my.ini中参数配置4.查看已经执行过的sql语句过去执行时间5.找出慢查询的sql6.常用参数查询命令7.认识慢查询日志记录8.认识通用日志记录&#xff08;记录增删改查操作&#xff09;9.认识二进制文件binlo…

一文了解spring事务特性

推荐工具 objectlog 对于重要的一些数据&#xff0c;我们需要记录一条记录的所有版本变化过程&#xff0c;做到持续追踪&#xff0c;为后续问题追踪提供思路。objectlog工具是一个记录单个对象属性变化的日志工具,工具采用spring切面和mybatis拦截器相关技术编写了api依赖包&a…

Day36 单调递增的数字 + 监控二叉树

738 单调递增的数字 题目链接&#xff1a;https://leetcode.cn/problems/monotone-increasing-digits/description/ 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数…

Pointnet++改进即插即用系列:全网首发UIB轻量化模块

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入UIB,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三

数据结构学习/复习12

一、排序概念与应用 二、插入排序 三、希尔排序 当间隔数为1时则为插入排序 1.一组一组排 2.多组并排 3.间隔数变化直至为1 四、性能测速代码

Java类加载器介绍

在Java中&#xff0c;类加载器是一种动态加载类的机制&#xff0c;它负责在运行时查找、加载和链接类文件。当Java应用程序需要创建某个类的对象时&#xff0c;类加载器会在运行时查找该类对应的.class文件&#xff0c;并将其加载到Java虚拟机中。Java类加载器通常分为三层&…

【Android】Kotlin学习之数据容器(数组for循环遍历)

数组遍历 1. for ( item in arr){…} 2. for ( i in arr.indeces ) {…} (遍历下标) 3. for ((index, item) in arr.withInfex()) {…} (遍历下标和元素) 4. arr.forEach {} ( 遍历元素 ) 5. arr.forEachIndexed{index, item -> …}

Python尝试安装 pyaudio 时遇到的错误信息表示安装过程失败,原因是找不到 Python.h 头文件

环境&#xff1a; Python 3.8.10 WSL2 问题描述&#xff1a; 尝试安装 pyaudio 时遇到的错误信息表示安装过程失败&#xff0c;原因是找不到 Python.h 头文件 error: subprocess-exited-with-error Building wheel for pyaudio (pyproject.toml) did not run successfully…