当前位置: 首页 > Linux

Linux性能分析内存缓存与Swap总结(四)

时间:2023-04-06 12:04:22 Linux

0x00前言在简单了解了内存的基本原理以及如何查看内存的free-h命令之后,还需要了解内存的一些参数的含义。如下图,基本上所有的参数都可以通过名字知道,但是其中有些参数可能光看名字就不知道是干什么用的,所以我们需要多了解一下。sharedsharedmemorybuff/cachecacheSwap交换内存~#free-htotalusedfreesharedbuff/cacheavailableMem:1.8Gi177Mi1.1Gi8.0Mi479Mi1.4GiSwap:4.0Gi0B4.0G共享内存是tmpfs文件系统使用的所有内存Sharedmemory用于与其他进程共享内存(进程间通信),加载动态链接库和程序的代码段。我对共享内存没有更深入的了解,但感觉像动态库和程序这些代码段是“死”的东西,不需要频繁的分配和回收,所以一般来说,它们不会造成内存性能问题,所以这里就不细说了,那么剩余的buff/cache和swap会被更频繁的分配和回收,所以不得不详细说一下。在进入细节之前,我们首先要明白下面两个问题,那么就很容易理解这篇笔记的思路了。为什么需要内存?简而言之,计算机各个组件的速度不匹配。你可以看看下面的计算机金字塔图。不一致的解耦速度的产物是缓存。它上行到消息队列,下行到CPU寄存器。这就是两者的原因,因此您可以知道Memory充当磁盘的缓存。内存性能问题是什么意思?缓存有大小限制。如果它是无限的,那么我们可以将所有内容都放入缓存中。自然内存也是有大小限制的,所以我们平时说的内存性能问题主要是指内存容量问题和缓存命中率问题。当我们理解了以上两个问题后,我们就可以对这些问题进行延伸,这也是本篇笔记的重点。当内存页分类内存容量不足的时候如何换入换出,接下来我们就带着这些问题来搞清楚0x10Buffer/CacheBuffer和Cache是??干什么用的?我们可以执行manfree命令来查看文档。Buffer和Cache是磁盘I/O的缓存。作为块设备,磁盘上有一个文件系统。我们可以暂时把文件系统理解为对块设备的抽象和封装,存储在块设备上的文件是由文件系统组织和管理的。对磁盘的读写有两种,一种是通过文件系统,一种是不通过文件系统,即直接读写块设备。相应的,Buffer是读写块设备的缓存,而Cache是??读写文件系统的缓存。既然文件系统是在块设备上,那文件系统的缓存是不是既在Cache又在Buffer?早期的Linux会缓存两次。不过现在不会了,只会经过一层缓存。其实Buffer和Cache可以比作一个数据结构一致的数组,只不过块设备的缓存放在一部分,文件系统的缓存放在另一部分。内存页中有哪些页?文件页、文件映射页、文件匿名页、Buffer、Cache是??如何回收的?Buffer和Cache都可以被回收,这些被称为File-backedpages(文件页)。被程序修改过而没有写入磁盘的页面称为脏页,所以要想回收,必须先将脏页写入磁盘。方法是:在应用程序中调用:fsync内核线程:pdflush0x20Swap上面提到了文件页的回收,匿名页是如何回收的呢?这就是Linux的swap机制。它将Swap中不常用的匿名页放在内存中,也就是磁盘中,然后腾出空间供其他进程使用。所以Swap需要:换出,将暂时不用的数据保存到磁盘并换入,当进程再次访问这些内存时,从磁盘读取到内存。如何恢复记忆?直接内存回收:buffer和cache定期内存回收:kswapd0内核线程定期回收watermark剩余内存page_high:无压力0x21NUMANUMA的全称是(Non-UniformMemoryAccess)。即多核处理器分配给不同的Node,每个Node都有自己的内存空间。当需要内存回收时,可能是从其他Node上寻找空闲内存,也可能是从本Node上回收。有时候发现内存空间足够了,但是内存还是会因为这个原因被换出swap。0x22Swappiness调整回收匿名页和文件页的权重0x30总结为什么需要内存:各组件速度不匹配buff和缓存:对应块设备和文件系统内存页类型:文件页和匿名页对应缓存和swap分别内存回收方式:对应NUMA架构和Swap的直接回收和定时回收下Swappniness的调整