系统监控-硬件资源-内存篇01-整体思路-性能指标-性能工具概览-Buffer/Cache

参考来源:性能优化实战

内存的功能主要用来存储系统和应用程序的指令、数据、缓存等

内存性能分析整体思路

当你看到系统的剩余内存很低时,是不是就说明,进程一定不能申请分配新内存了呢?当然不是,因为进程可以使用的内存,除了剩余内存,还包括了可回收的缓存和缓冲区。
为了迅速定位内存问题,我通常会先运行几个覆盖面比较大的性能工具,比如
free、top、vmstat、pidstat 等。

先用 free 和 top,查看系统整体的内存使用情况。
再用 vmstat 和 pidstat,查看一段时间的趋势,从而判断出内存问题的类型。
最后进行详细分析,比如内存分配分析、缓存 / 缓冲区分析、具体进程的内存使用分析等。

在这里插入图片描述
1、通过 free,发现大部分内存都被缓存占用后,可以使用 vmstat 或者 sar观察一下缓存的变化趋势,确认缓存的使用是否还在继续增大

如果继续增大,则说明导致缓存升高的进程还在运行,那你就能用缓存 / 缓冲区分析工具(比如 cachetop、slabtop 等),分析这些缓存到底被哪里占用

2、当你 free 一下,发现系统可用内存不足时,首先要确认内存是否被缓存 / 缓冲区占用。排除缓存 / 缓冲区后,你可以继续用 pidstat 或者 top,定位占用内存最多的进程

找出进程后,再通过进程内存空间工具(比如 pmap),分析进程地址空间中内存的使用情况

3、当你通过 vmstat 或者 sar 发现内存在不断增长后,可以分析中是否存在内存泄漏的问题

内存分配分析工具 memleak ,检查是否存在内存泄漏。如果存在内存泄漏问题,memleak 会为你输出内存泄漏的进程以及调用堆栈

内存性能优化思路

  1. 最好禁止 Swap。如果必须开启 Swap,降低 swappiness 的值,减少内存回收时Swap 的使用倾向。
  2. 减少内存的动态分配。比如,可以使用内存池、大页(HugePage)等。
  3. 尽量使用缓存和缓冲区来访问数据。比如,可以使用堆栈明确声明内存空间,来存储需要缓存的数据;或者用 Redis 这类的外部缓存组件,优化数据的访问。
  4. 使用 cgroups 等方式限制进程的内存使用情况。这样,可以确保系统内存不会被异常进程耗尽。
  5. 通过 /proc/pid/oom_adj ,调整核心应用的 oom_score。这样,可以保证即使内存紧张,核心应用也不会被 OOM 杀死。

内存性能指标(三类)

在这里插入图片描述

为了分析内存的性能瓶颈,首先你要知道,怎样衡量内存的性能,也就是性能指标问题

首先,你最容易想到的是系统内存使用情况,比如已用内存、剩余内存、共享内存、可用内存、缓存和缓冲区的用量等。

已用内存和剩余内存很容易理解,就是已经使用和还未使用的内存。

共享内存是通过 tmpfs 实现的,所以它的大小也就是 tmpfs 使用的内存大小。tmpfs 其实也是一种特殊的缓存。

可用内存是新进程可以使用的最大内存,它包括剩余内存和可回收缓存。

缓存包括两部分,一部分是磁盘读取文件的页缓存,用来缓存从磁盘读取的数据,可以加快以后再次访问的速度。另一部分,则是 Slab 分配器中的可回收内存。

缓冲区是对原始磁盘块的临时存储,用来缓存将要写入磁盘的数据。这样,内核就可以把分散的写集中起来,统一优化磁盘写入。

第二类很容易想到的,应该是进程内存使用情况,比如进程的虚拟内存、常驻内存、共享内存以及 Swap 内存等。

**虚拟内存,**包括了进程代码段、数据段、共享内存、已经申请的堆内存和已经换出的内存等。这里要注意,已经申请的内存,即使还没有分配物理内存,也算作虚拟内存。

常驻内存是进程实际使用的物理内存,不过,它不包括 Swap 和共享内存。

共享内存,既包括与其他进程共同使用的真实的共享内存,还包括了加载的动态链接库以及程序的代码段等。

Swap 内存,是指通过 Swap 换出到磁盘的内存。

当然,这些指标中,常驻内存一般会换算成占系统总内存的百分比,也就是进程的内存使用率。

除了这些很容易想到的指标外,我还想再强调一下,缺页异常

在内存分配的原理中,我曾经讲到过,系统调用内存分配请求后,并不会立刻为其分配物理内存,而是在请求首次访问时,通过缺页异常来分配。缺页异常又分为下面两种场景

可以直接从物理内存中分配时,被称为次缺页异常。

需要磁盘 I/O 介入(比如 Swap)时,被称为主缺页异常。

显然,主缺页异常升高,就意味着需要磁盘 I/O,那么内存访问也会慢很多。

除了系统内存和进程内存,第三类重要指标就是 Swap 的使用情况,比如 Swap 的已用空间、剩余空间、换入速度和换出速度等。

已用空间和剩余空间很好理解,就是字面上的意思,已经使用和没有使用的内存空间。

换入和换出速度,则表示每秒钟换入和换出内存的大小。

内存性能工具速查表,常见工具的特点和注意事项

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

Buffer 和 Cache 的区别

注:今天内容接下来的部分,Buffer 和 Cache 我会都用英文来表示,避免跟文中的“缓
存”一词混淆。而文中的“缓存”,则通指内存中的临时存储。

从 free 的手册中,你可以看到 buffer 和 cache 的说明。

Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。

Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与SReclaimable 之和。

这里的说明告诉我们,这些数值都来自 /proc/meminfo,但更具体的 Buffers、Cached和 SReclaimable 的含义,还是没有说清楚。

在这里插入图片描述
Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大
(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如
可以把多次小的写合并成单次大的写等等。

Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访
问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。
SReclaimable 是 Slab 的一部分。Slab 包括两部分,其中的可回收部分,用
SReclaimable 记录;而不可回收部分,用 SUnreclaim 记录。

Cache 是文件读的缓存,但实际上,Cache 也会缓存写文件时的数据。

Buffer 既可以用作“将要写入磁盘数据的缓存”,也可以用作“从磁盘读取数据的缓存”。
Cache 既可以用作“从文件读取数据的页缓存”,也可以用作“写文件的页缓存”。

Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。

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

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

相关文章

这4本计算机期刊,含CCF推荐,1个月发表周期,部分期刊剩15篇版面,接受预留

转眼间已进入四月份,正值春景好时节,在踏青赏景之余也别忘了做好科研(学业)规划。 我方致力于学术论文发表辅导十余年,与100余家国际出版社长期合作,推荐各领域论文至SCI/EI/CNKI收录期刊快速发表&#xf…

【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt信号和槽的其他说明及Lambda表达式 文章编号:Qt 学习笔记…

头歌-机器学习 第16次实验 EM算法

第1关:极大似然估计 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握: 什么是极大似然估计; 极大似然估计的原理; 极大似然估计的计算方法。 什么是极大似然估计 没有接触过或者没有听过”极大似然估计“的同学…

开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

一、前言 Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念,特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习,模型可以更好地处理未知的情况和新任务,减少对大量标注数据的依赖,提高模型的…

PWM、通信、串口通信、UART、TTL、51单片机串口通信、定时器初值的计算公式

我要成为嵌入式高手之4月8日51单片机第三天!! ———————————————————————————— PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来…

护眼台灯怎么选看哪些指标?兼顾性能与性价比护眼灯十大品牌推荐

对于长时间面对电子屏幕的上班族和学业负担重的学生族来说,他们的眼睛承受着巨大压力。加之不良的用眼习惯,导致近视人数不断增加。然而,良好的光线对眼睛健康至关重要。适宜的照明可以提供舒适的环境,减轻眼睛的负担。因此&#…

锂电池升降压转换利器:PW2224转换器,实现3.3V高效持续输出

描述: PW2224是一款专为锂电池供电设备设计的高效单电感降压-升压转换器。这款转换器能够在3V至4.2V的锂电池输入电压范围内工作,实现升降压模式自动切换,稳定输出3.3V电压,并持续提供高达1A的负载电流。此外,PW2224的…

栈的弹出压入弹出顺序

栈的压入弹出顺序 题目算法原理代码实现 题目 栈的压入弹出顺序 给定一个栈的压入顺序,然后再给定一个栈的弹出顺序,问这个两个顺序是否匹配 算法原理 定义一个栈s,我们先把栈的压入顺序数组的元素压入栈中,直到栈顶元素等于弹…

UE5、CesiumForUnreal实现加载建筑轮廓GeoJson数据生成白模功能

1.实现目标 在UE5.3中,通过加载本地建筑边界轮廓面GeoJson数据,获取底面轮廓和楼高数据,拉伸生成白模,并支持点选高亮。为防止阻塞Game线程,使用了异步任务进行优化,GIF动图如下所示: 其中建筑数量:128871,顶点索引数量:6695748,三角面数量:2231916,顶点数量:165…

计算机网络-OSPF路由汇总

一、路由汇总 路由汇总又被称为路由聚合,即是将一组前缀相同的路由汇聚成一条路由,从而达到减小路由表规模以及优化设备资源利用率的目的,我们把汇聚之前的这组路由称为精细路由或明细路由,把汇聚之后的这条路由称为汇总路由或聚合…

高速开箱机在现代生产线中的角色与价值

在快节奏的现代工业生产中,高速开箱机已成为不可或缺的重要设备。它不仅大幅提升了生产线的效率,更在确保产品质量、降低成本、增强市场竞争力等方面发挥着重要作用。星派将详细探讨高速开箱机在现代生产线中的角色与价值。 一、高速开箱机的功能特点 高…

为什么学生很难真正学好嵌入式?

10几年前,我是读电气工程专业,学了很多东西,结构,电机、绘图,plc等等.. 其实,都没什么鸟用,出来还是像个废物。 后面我自学转了单片机开发,说句难听点,自己买个开发板都比…

实用工具系列-ADB使用方式

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(WPS二次开发QQ群:250325397),摸鱼吹牛嗨起来&#xff0…

睿尔曼超轻量仿人机械臂之在ROS里引用正逆解函数库

一、机械臂运动学正逆解说明 机械臂运动学就是根据未端执行器与所选参考坐标系之间的几何关系,确定末端执行器的空间位置和姿态与各关节变量之间的数学关系。包括正运动学 (Forward Kinematics)和逆运动学 (Inverse Kinematics)两部分。 机械臂运动分为关节空间运…

Unity 中画线

前言: 在Unity项目中,调试和可视化是开发过程中不可或缺的部分。其中,绘制线条是一种常见的手段,可以用于在Scene场景和Game视图中进行调试和展示。本篇博客将为你介绍多种不同的绘制线条方法,帮助你轻松应对各种调试…

数据可视化-ECharts Html项目实战(11)

在之前的文章中,我们学习了如何在ECharts中特殊图表的双y图以及自定义形状词云图。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECh…

Java数据结构二叉树

概念 一棵二叉树是结点的一个有限集合,该集合: 1. 或者为空 2. 或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。 从上图可以看出: 1. 二叉树不存在度大于2的结点 2. 二叉树的子树有左右之分,次序不能颠倒&#x…

医疗器械FDA | 常见的网络安全材料发补问题都有哪些?

FDA网络安全资料发补咨询点此​​获取https://work.weixin.qq.com/ca/cawcde5ee29d239046 ————————--- 01 安全文档编写问题 FDA网络安全文档编写格式、内容、可读性等未满足官方要求,则将可能被要求发补整改编写后的文档。 02 安全管理问题 a. 网络安…

【机器学习】K-means聚类算法:原理、应用与优化

一、引言 1、简述聚类分析的重要性及其在机器学习中的应用 聚类分析,作为机器学习领域中的一种无监督学习方法,在数据探索与知识发现过程中扮演着举足轻重的角色。它能够在没有先验知识或标签信息的情况下,通过挖掘数据中的内在结构和规律&a…

深度学习学习日记4.7

1.梯度下降 w 新 w旧 - 学习率梯度 训练的目的就是让 loss 减小 2.前向传播进行预测, 反向传播进行训练(每一个参数通过梯度下降进行更新参数),(1前向传播 2求 loss 3反向传播 4梯度更新) 能够让损失下降的参数,就是更好的参数。 损失…