linux 性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)

引言

学生时代经常听到老师和同学说到学习 linux 的重要性。但是当时看到这个命令行界面就头疼,也就草草地应付学了一下,哎嘛,还是游戏香!

但是当前两天自己捣鼓服务器的时候,发现自己部署的一个服务总是崩溃,最终发现是服务器的内存不够了。

现在要查询问题原因又头疼了!害,只怪之前没有好好学习实践,该头疼还是会头疼,只不过是早晚的事儿。(咳咳,也奉劝后来者,若想要在从事相关领域,基础知识还是打打牢,内功心法多学一点总没错)。

今天这篇文章简单介绍一下 linux 系统中如何对内存进行分析。

常见的内存分析工具介绍

/proc/meminfo

cat /proc/meminfo

在这里插入图片描述

单词解释
MemTotal系统总内存,通常会比硬件内存要小一些,是由于 BIOS、内核等也会占用一定的内存。
MemFree系统空闲内存, 物理内存剩余。
MemAvailable应用程序可用内存,和 MemFree 的区别在于:MemFree 就是内存条剩余的空间,是系统层面的。而 MemAvailable 则是应用程序层面的,系统中有些内存虽然被使用了,但是有一部分是可以回收的,如:BuffersCached 等,当应用程序需要使用内存时,系统会主动释放这部分内存。
Buffers缓冲区内存,用来缓存尚未“写入”磁盘的内容。
Cached缓存从磁盘“读取”出来的东西。

buffer 被用来当成对 io 设备写的缓存。而 cache 被用来当作对 io 设备的读缓存。这里的 io 设备,主要指的是块设备文件和文件系统上的普通文件。

MemAvailable = MemFree + Buffers + Cached

请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

free

free -h

free

单词解释
Mem行(第二行)内存的使用情况
Swap行(第三行)交换空间的使用情况。可以将其想象成 windows 的虚拟内存,当内存不足时,把一部分硬盘空间虚拟成内存使用。
total总可用物理内存。
used已使用的物理内存和交换空间。
free系统尚未使用的物理内存。
shared共享内存空间。
buff/cache列显示被 buffercache 使用的物理内存大小,这部分内存是当应用程序需要使用时系统可以主动释放的,通常将系统中经常使用的文件、块设备文件进行缓存。
available应用程序可用内存。
MemTotal = used + free + buff/cache

vmstat

vmstat 2 3 第一个参数代表隔几秒执行一次,第二个参数是执行多少次退出。若不给第二个参数,则会持续输出内容,需要 Ctrl+C 来退出。

在这里插入图片描述

单词解释
rProcs(进程),等待执行的任务数,即有多少进程在等待 cpu 执行任务,可用于分析 cpu,一般这个值不会大于 cpu 的个数,如果超过了,会出现 cpu 瓶颈
b有多少进程在等待 io
swpd正在使用虚拟内存的大小,单位 k
free空闲内存的大小
buff已用的 buff 大小,对块设备的读写进行缓冲
cache已用的 cache 大小,文件系统的 cache
si每秒从交换区写入内存的大小(单位:kb/s)
so每秒从内存写到交换区的大小
biio 分析,每秒读取的块数(读磁盘)
boio 分析,每秒写入的块数(写磁盘)
in每秒中断数,包括时钟中断(越小越好)
cs每秒上下文切换数(越小越好),值太大需要考虑降低进程或线程数目
us用户进程执行消耗 cpu 时间(user time),若是长期使用超过 50%,则需要考虑优化算法或者实施其他措施
sy系统进程消耗 cpu 时间(system time),该值过高,需要检查是什么导致的内核消耗的 cpu 资源多,需要优化。通常情况 us + sy 的参考值为 80%
id空闲时间(包括 io 等待时间),一般来说 us+sy+id=100
wa等待 io 时间,wa 过高时,说明 io 等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

top

top 可以看到进程 PID,若发现失控的进程,可以找到对应的进程进行故障排除(kill)。

命令行交互,实时刷新展示数据,q 退出。

在这里插入图片描述

基于上面所讲述的,基本上都能看懂含义,下面的几个没见过的列一下。

单词解释
VIRTvirtual memory usage 虚拟内存占用大小
RESresident memory usage 实际内存占用
SHRshared memory 共享内存占用

ps

ps aux --sort=rssrss 正序排序。

在这里插入图片描述

top 差不多,就不详细解释了。

单词解释
%MEM进程占用物理内存的百分比
VSZ使用的虚拟内存大小
RSS进程使用物理内存大小,重点关注这个值

pmap

pmap -x pid 用于查看进程的内存映像信息,看哪些地方用了多少内存。

在这里插入图片描述
在这里插入图片描述

单词解释
Address占用内存的文件的内存起始地址
Kbytes占用内存的字节数
RSS实际占用内存大小
Dirty脏页大小
Mapping占用内存的文件,[anon] 为已分配的内存,[stack] 为程序堆栈

最后的 total 为统计的总值。通常当想看这个程序的内存消耗情况,可以只看最后一行,如下:

while true; do pmap -x pid | tail -1; sleep 1; done

在这里插入图片描述

总结

上述工具都是 linux 自带的,当然也有很多更高级的工具。实际工作中,挑自己用的顺手的用就行了,基本上用顺手了都能够定位问题。我一般的使用:

  • 只查看系统的内存使用情况:free -h ,很直观。
  • 分析进程内存占用: top/ps 都不错。
  • 深入分析: pmap

当然了,也可以在服务器安装运维管理面板,目前开源的项目也很多,直接通过图形化界面来查看更加方便。

所有的工具都是为了解决问题而使用的,不要为了使用工具而使用工具,本篇记录一下常用工具,也方便之后自己进行回顾,可以先大概了解工具都能做什么,真正需要用到的时候再详细去了解使用即可。

参考

  • linux内存管理(详解)
  • 一文掌握 Linux 性能分析之内存篇
  • Linux内存占用分析的几个方法,你知道几个?
  • 超全整理!Linux 性能分析工具汇总
  • Linux内存机制 Swap机制以及如何手动释放swap和内存
  • Linux中的buff/cache内存
  • Linux buffer/cache 内存占用过高的原因以及解决办法

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

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

相关文章

python将png格式的图片转换为jpg格式的图片

png图片是4通道 RGBA图像,具有4个通道(红色、绿色、蓝色和透明度),用于表示彩色图像以及透明度信息。 只是简单的修改后缀,并不能将png格式图片改为jpg格式。 将png格式的图片转换为jpg格式的图片 确保安装了pillow库…

Visual Studio 2022的MFC框架——theApp全局对象

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 MFC中的WinMain函数是如何与MFC程序中的各个类组织在一起的呢?MFC程序中的类是如何与WinMain函数关联起来的呢&#xff1f…

UWB高精度人员定位系统源码,微服务+java+ spring boot+ vue+ mysql技术开发

工业物联网感知预警体系,大中小企业工业数字化转型需求的工业互联网平台 工厂人员定位系统是指能够对工厂中的人员、车辆、设备等进行定位,实现对人员和车辆的实时监控与调度的系统,是智慧工厂建设中必不可少的一环。由于工厂的工作环境比较…

Linux(基础篇一)

Linux基础篇 Linux基础篇一1. Linux文件系统与目录结构1.1 Linux文件系统1.2 Linux目录结构 2. VI/VIM编辑器2.1 vi/vim是什么2.2 模式间的转换2.3 一般模式2.4 插入模式2.4.1 进入编辑模式2.4.2 退出编辑模式 2.5 命令模式 3. 网络配置3.1 网络连接模式3.2 修改静态ip3.3 配置…

优维产品最佳实践第5期:什么是持续集成?

谈到到DevOps,持续交付流水线是绕不开的一个话题,相对于其他实践,通过流水线来实现快速高质量的交付价值是相对能快速见效的,特别对于开发测试人员,能够获得实实在在的收益。 本期EasyOps产品使用最佳实践&#xff0c…

先进API生产力工具eqable HTTP,一站式开发调试工具推荐

简介 Reqable是什么? Regable Fiddler/Charles Postman Reqable是HTTP一站式开发调试国产化解决方案,拥有更便捷的体验,更先进的协议,更高效的性能和更精致的界面。 Reqable是一款跨平台的专业HTTP开发和调试工具,在全平台支持…

【业务功能篇83】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-应用层实战

五、ElasticSearch应用 1.ES 的Java API两种方式 Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种。相比来说transportClient API效率更高,transportClient 是通过Elasticsearch内部RPC的形式进行请求…

基于OpenCV实战(基础知识二)

目录 简介 1.ROI区域 2.边界填充 3.数值计算 4.图像融合 简介 OpenCV是一个流行的开源计算机视觉库,由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包,可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和计算机视觉应用。Ope…

水果flstudio好用吗?中文版FL21最新版本如何下载

FL Studio21版是一款功能强大的音乐制作软件,广泛应用于电子音乐、流行音乐、电影配乐等领域。它提供了丰富多样的音频合成和编辑工具,使音乐制作变得更加灵活多样。无论是初学者还是专业音乐制作人,都可以通过直观的界面和丰富的音频特效来实…

论文阅读:DIN-SQL: Decomposed In-Context Learning of Text-to-SQL withSelf-Correction

NL2SQL是将自然语言转化为SQL的任务,该任务隶属于NLP的子任务,NL2SQL在AIGC时代之前,以seq2seq、BERT等系列的模型在NL2SQL的主流数据集上取得了不错的效果,2022年底,ChatGPT爆火,凭借LLM强大的逻辑推理、上…

NLP的tokenization

GPT3.5的tokenization流程如上图所示,以下是chatGPT对BPE算法的解释: BPE(Byte Pair Encoding)编码算法是一种基于统计的无监督分词方法,用于将文本分解为子词单元。它的原理如下: 1. 初始化:将…

bh002- Blazor hybrid / Maui 保存设置快速教程

1. 建立工程 bh002_ORM 源码 2. 添加 nuget 包 <PackageReference Include"BootstrapBlazor.WebAPI" Version"7.*" /> <PackageReference Include"FreeSql" Version"*" /> <PackageReference Include"FreeSql.…

设计模式(8)外观模式

一、 1、使用背景&#xff1a;降低访问复杂系统的内部子系统时的复杂度&#xff0c;简化客户端之间的接口。 2、定义&#xff1a; 为子系统中的一组接口定义一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。完美地体现…

Linux 内核与架构速查

Linux 内核与架构速查 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539687357 本文主要记录查询 Linux 计算机的内核与架构&#xff0c; 用于下载对应架构的第三方软件。 一、介绍 如上图所示&#xff0c; 有时候我们下载一些第三方软件&#xff0c; 软件会有很…

如何快速在vscode中实现不同python文件的对比查看

总体而言&#xff1a;两种方式。一种是直接点击vscode右上角的图标&#xff08;见下图&#xff09;。 另一种方式就是使用快捷键啦“**Ctrl\**”&#xff0c;用的时候选中想要对比的python文件&#xff0c;然后快捷键就可以达到下图效果了&#xff1a; 建议大家直接使用第二…

【位运算】算法实战

文章目录 一、算法原理常见的位运算总结 二、算法实战1. leetcode面试题01.01. 判断字符是否唯一2. leetcode268 丢失的数字3. leetcode371 两整数之和4. leetcode004 只出现一次的数字II5. leetcode面试题17.19. 消失的两个数字 三、总结 一、算法原理 计算机中的数据都以二进…

JAVA switch case 穿透问题

1&#xff0c;前提 其实开发中很少会用到switch &#xff0c;一般更倾向于if-else&#xff0c; 但是最近接手的项目&#xff0c;前人写的代码都用switch &#xff0c; 但是我一直以来对switch 的理解就跟if一样&#xff0c; 然后项目运用的时候才发现这玩意居然还有穿透问题 …

14-数据结构-二叉树的创建以及前中后遍历,以及结点和叶子节点的计算(C语言)

概述&#xff1a; 二叉树&#xff0c;这里采用孩子链表存储法&#xff0c;即一个数据域和两个左右孩子指针域。随后递归进行遍历即可。在创建二叉树的时候&#xff0c;先创建各个二叉树结点&#xff08;这里的结点采用动态分配&#xff0c;因此结点为指针变量&#xff09;&…

(三)Linux中卸载docker(非常详细)

docker 卸载 使用yum安装docker 如需卸载docker可以按下面步骤操作&#xff1a; 1、停止docker服务 systemctl stop docker 2、查看yum安装的docker文件包 yum list installed |grep docker 3、查看docker相关的rpm源文件 rpm -qa |grep docker 4、删除所有安装的docke…

4.1011

目录 四次挥手中收到乱序的FIN包会如何处理&#xff1f; 在 TIME_WAIT 状态的 TCP 连接&#xff0c;收到 SYN 后会发生什么&#xff1f; 四次挥手中收到乱序的FIN包会如何处理&#xff1f; 如果FIN报文比数据包先道道客户端&#xff0c;此时FIN是一个乱序报文&#xff0c;此时…