0x00 前言

在简单的了解了内存的基本原理和如何查看内存的命令free -h后,还要需要了解内存的一些参数含义。如下所示,基本上所有的参数看名字就知道是啥意思,但是有这几个看名字可能也不知道具体是干啥的,所以还需要深入了解下。

shared 共享内存

buff/cache 缓存

Swap 交换内存

~ # free -h

total used free shared buff/cache available

Mem: 1.8Gi 177Mi 1.1Gi 8.0Mi 479Mi 1.4Gi

Swap: 4.0Gi 0B 4.0Gi

shared 内存是所有被 tmpfs 文件系统使用的内存和共享内存,用于和其他进程共同使用的内存(进程间通信)和加载的动态链接库和程序的代码段.我对 shared 内存的也没有更深入的了解,但我觉得像动态库和程序的代码段这些都是”死“的东西,不需要频繁的分配和回收,所以一般情况下不会造成内存的性能问题,所以这里就不细说了,那么剩下的 buff/cache 和 swap 由于会比较频繁的分配和回收,所以得详细说说。

在详细说之前,首先要弄明白以下两个问题,那么就很容易理解这篇笔记的思路了。

为什么需要内存?

简而言之就是计算机各个部件的速度不匹配,可以查看下面这个计算机金字塔图,而解耦速度不一致的神器就是缓存,上到消息队列,下到 CPU 寄存器,无一不是这个道理,所以可以知道内存是作为磁盘的缓存。

我们所说的内存性能问题是什么?

缓存是有大小限制的,要是无限大那我们所有东西都放缓存里就得了。自然内存也是有大小限制了,那么我们平时常说的内存性能问题则主要指内存容量的问题和缓存命中率的问题。

当我们弄明白了上面这两个问题,又可以延伸出这些问题,这也是本篇笔记要讲的重点。

内存页分类

内存容量不足怎么换入换出

好,接下来我们带着这些问题来深究

0x10 Buffer/Cache

Buffer 和 Cache 分别是干嘛的?

我们可以执行 man free命令查看说明文档,Buffer 和 Cache 是用作磁盘 I/O 的缓存。磁盘作为一个块设备,上面会有文件系统,我们可以暂时把文件系统理解为对块设备的抽象和封装,而存储在块设备上的文件都是由文件系统来组织和管理。而对磁盘的读写有两种,一种是经过文件系统,还有一种是不经过文件系统,也就是直接读写块设备。由此对应,Buffer 是对块设备读写的缓存,而 Cache 则是对文件系统读写的缓存。

由于文件系统是在块设备之上,那么文件系统的缓存是不是在 Cache 和 Buffer 里都有一份?

早期的Linux会的,也就是cache两次。不过现在不会了,只会经过一层cache。实际上 Buffer 和 Cache 可以比喻成一个数据结构一致的数组,只不过块设备的缓存放一部分,文件系统的缓存放另一部分。

内存页中有哪些页?

文件页

文件映射页

文件匿名页

Buffer 和 Cache 是怎么回收的?

Buffer 和 Cache 都是可以被回收的,而这些被叫做File-backed page(文件页)。被程序修改过的还没写入磁盘的叫做脏页,所以如果要回收先要把脏页写到磁盘里。方式有:

应用程序中调用: fsync

内核线程: pdflush

0x20 Swap

上面说了文件页的回收,匿名页是怎么回收的呢?这就是 Linux 的 swap 机制,把不常用的内存里不常用的匿名页放在 Swap 里面,也是就是磁盘里面,然后空出地方来给别的进程用。所以 Swap 就需要:

换出,把暂时不用的数据存到磁盘里

换入,当进程再次访问这些内存的时候,把他们从磁盘读到内存里。

内存回收的方式?

直接内存回收: buffer 和 cache

定期内存回收:kswapd0内核线程

定期回收内存的 watermark

剩余 < 阈值: 只有内核可以分配

page_min < 剩余 < page_low: kswapd0 回收内存

page_low < 剩余 < page_hight: 有压力

剩余 > page_high: 没压力

0x21 NUMA

NUMA 全称叫(Non-Uniform Memory Access)。就是多核心的处理器划到不同的 Node,每个 Node 都有自己的内存空间。当要内存回收时,可能是从其他 Node寻找空闲内存,或者从本 Node 回收。有时候发现内存空间很足,但仍然换出了内存到 swap 里面就是这个原因。

0x22 Swappiness

调节回收匿名页和文件页的权重

0x30 总结

为什么需要内存:各元件速度不匹配

buff 和 cache:对应块设备和文件系统

内存页类型:文件页和匿名页分别对应缓存和 swap 内存

回收方式:分别对应直接回收和定期回收

Swap 下的 NUMA 架构和调节 Swappniness

linux内存懒分配,Linux 性能分析总结之内存缓存与Swap(四)相关推荐

  1. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析

    C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...

  2. Linux五种IO模型性能分析

    转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型性能分析 目录(?)[-] 概念理解 Linux下的 ...

  3. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  4. sar命令,linux中最为全面的性能分析工具之一

    sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工具将对系统当前的状态就行取样,然后通 ...

  5. 分析linux系统的运行性能,Linux系统的性能测试与性能分析

    Linux系统的性能测试与性能分析 发表于:2012-12-03来源:一淘测试作者:若凌点击数: Linux系统的性能测试与性能分析1 性能测试简介 性能测试的过程就是找到系统瓶颈的过程. 性能测试( ...

  6. Valgrind ---内存调试,内存泄漏检测以及性能分析的软件开发工具

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具.Valgrind这个名字取自北欧神话中英灵殿的入口. 一般使用方式  valgrind --leak-check=full ...

  7. linux下利用valgrind工具进行内存泄露检测和性能分析

    http://blog.csdn.net/yanghao23/article/details/7514587 valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简 ...

  8. Linux valgrind java_linux下利用valgrind工具进行内存泄露检测和性能分析

    valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简绍 Valgrind包含下列工具: 1.memcheck:检查程序中的内存问题,如泄漏.越界.非法指针等. 2 ...

  9. linux 共享内存为分配,Linux在x86_64上共享内存分配

    我有64位REHL linux,Linux Linux ipms-sol1 2.6.32-71.el6.x86_64#1 SMP x86_64 x86_64 x86_64 GNU / Linux RA ...

最新文章

  1. Java面向对象三大特征 之 多态性
  2. python BeautifulSoup的简单使用
  3. DNS主从类型的架设
  4. (七)OpenStack---M版---双节点搭建---Dashboard安装和配置
  5. python中的format什么意思中文-python里format什么意思
  6. wxWidgets:wxSimpleHtmlListBox类用法
  7. [SDOI2011]消耗战
  8. 上传excel腾讯云服务器,使用SpringBoot上传文件到腾讯云
  9. php中怎样阻止网页进行跳转,PHP中阻止网页进行跳转的方法
  10. armeabi-v7a arm64-v8a armeabi x86 x86_64区别
  11. 景观干扰度(arcgis和fragstats)
  12. 如何把windowsXP系统主题成Windows7风格windowsxp主题包
  13. wps怎么图片透明_wps中图片怎么样调透明度_word设置图片背景透明的图文教程-爱纯净...
  14. (ECCV-2020)步态横向网络-GLN
  15. 【信息系统项目管理师】2018下半年系统集成项目管理工程师案例分析
  16. 【专业发展】技术领导力
  17. 中国电子学会图形化四级编程题:小猫钓鱼
  18. 中国龙与西方龙的头部区别
  19. 【卡尔曼滤波介绍与原理解析】
  20. layUI自定义列表每页条数

热门文章

  1. “90后”女大学生奇怪 白毛女为何不嫁黄世仁
  2. Ueeshop:外贸网站推广优化方法和注意事项
  3. [转载]你有英文名字吗?给自己起一个吧
  4. 1D Barcode图片组件,支持线性和邮政符号
  5. 比特率 Kbps kbit/s 1KB/s Byte 的正确理解
  6. 23种设计模式之代理模式
  7. [论文学习]Private traits and attributes are predictable from digital records of human behavior
  8. 新学期,新气象,新目标
  9. [Editing] TP-LINK740N v5 firmware Crack
  10. 舆情监测系统软件如何选择及系统作用详介