首页 > 其他分享 >drop_caches 的简单学习

drop_caches 的简单学习

时间:2023-11-20 18:44:06浏览次数:27  
标签:9999 drop free 学习 xxxxxx301 5.907 root 1548592 caches

drop_caches 的简单学习


背景

最近一段时间一直在学习内存相关的知识
Linux系统里面的内存管理还是非常复杂的. 

我这边理解 Linux从宏观层次的 段页式内存管理
到细节的buddy和slab 以及大页内存分配
以及page cache 和buffers的缓存等设置. 

最近因为遇到了CentOS6和CentOS7 free 显示内存不一致的问题
耗费了自己很大的精力. 
自己这边有CentOS7的环境, 所以想使用CentOS7进行一下验证

TLDR版本的结论

1. drop_caches 是有时间成本的. 清理缓存并不能够达到DDR宣称的带宽与速度. 
   DDR号称的带宽可以有 2.4G*8*2  至少 51.2GB/S的带宽 (双通道,DDR 2400频率)
   但是实际验证最多也就15GB/S左右的卸载速度. 说明还是有很多其他损耗的. 

2. linux内核里面有很多dirty相关的参数, 但是他仅是负责buffer 脏页的回写等处理.
   并不会影响只读的page caches 
   只有内存遇到瓶颈. Linux才会使用LRU的策略清理page cache. 
   没有压力的情况下系统几乎不会做任何处理. 

3. 系统内核有一个 min free 相关的参数, 可能会影响 page caches的回收时机
   但是非常不建议修改过大的数值,可能会导致系统崩溃. 
   vm.min_free_kbytes 仅好看, 实际效益非常低. 

验证

cat onefile > filenew 
缓存数据量为: 11.815G
time echo 3 >/proc/sys/vm/drop_caches

real    0m0.780s
user    0m0.000s
sys     0m0.767s

消耗时间为 0.78秒

[root@oracle12c ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          47005       13798         382          20       32825       32733
Swap:          8079          14        8065

这次的驱逐时间为:

缓存数据量为: 31.532G 
time echo 3 >/proc/sys/vm/drop_caches

real    0m2.163s
user    0m0.000s
sys     0m2.124s

说明cache 太大的情况下进行内存驱逐的时间也是比较久的
并不是没有成本的. 

虚拟化的情况下 1秒钟大约可以卸载从pagecache中 15G的内存.
进行了多次验证, 时间基本上符合2S左右的区间. 

缓存的使用的驱逐

+----------------------------+----------------+-------------+----------------+-------------+---------+
| Name                       | Size           │ Pages       │ Cached Size    │ Cached Pages│ Percent │
|----------------------------+----------------+-------------+----------------+-------------+---------|
| /root/all.dump             | 5.156G         | 1351552     | 5.156G         | 1351552     | 100.000 |
| /root/xxxxxx301_9999.dump  | 5.907G         | 1548592     | 5.144G         | 1348480     | 87.078  |
| /root/xxxxxx301_9999.dump2 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
| /root/xxxxxx301_9999.dump3 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
| /root/xxxxxx301_9999.dump4 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
| /root/xxxxxx301_9999.dump5 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
|----------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum                        │ 34.693G        │ 9094512     │ 10.300G        │ 2700032     │ 29.689  │
+----------------------------+----------------+-------------+----------------+-------------+---------+

最开始使用第一个文件读入缓存

内存范围内可以使用时都是100%

+----------------------------+----------------+-------------+----------------+-------------+---------+
| Name                       | Size           │ Pages       │ Cached Size    │ Cached Pages│ Percent │
|----------------------------+----------------+-------------+----------------+-------------+---------|
| /root/all.dump             | 12.334G        | 3233248     | 12.334G        | 3233248     | 100.000 |
| /root/xxxxxx301_9999.dump2 | 5.907G         | 1548592     | 5.907G         | 1548592     | 100.000 |
| /root/xxxxxx301_9999.dump  | 5.907G         | 1548592     | 5.907G         | 1548592     | 100.000 |
| /root/xxxxxx301_9999.dump3 | 5.907G         | 1548592     | 515.500M       | 131968      | 8.522   |
| /root/xxxxxx301_9999.dump4 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
| /root/xxxxxx301_9999.dump5 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
|----------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum                        │ 41.871G        │ 10976208    │ 24.652G        │ 6462400     │ 58.876  │
+----------------------------+----------------+-------------+----------------+-------------+---------+

内存有压力的情况下, 第一个读入缓存的内容开始减少 符合LRU的特点

+----------------------------+----------------+-------------+----------------+-------------+---------+
| Name                       | Size           │ Pages       │ Cached Size    │ Cached Pages│ Percent │
|----------------------------+----------------+-------------+----------------+-------------+---------|
| /root/all.dump             | 15.948G        | 4180779     | 15.773G        | 4134853     | 98.901  |
| /root/xxxxxx301_9999.dump2 | 5.907G         | 1548592     | 5.907G         | 1548592     | 100.000 |
| /root/xxxxxx301_9999.dump  | 5.907G         | 1548592     | 5.752G         | 1507760     | 97.363  |
| /root/xxxxxx301_9999.dump3 | 5.907G         | 1548592     | 4.138G         | 1084800     | 70.051  |
| /root/xxxxxx301_9999.dump4 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
| /root/xxxxxx301_9999.dump5 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
|----------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum                        │ 45.485G        │ 11923739    │ 31.570G        │ 8276005     │ 69.408  │
+----------------------------+----------------+-------------+----------------+-------------+---------+

第一个文件读入的文件 卸载了缓存之后 开始卸载第二个读入的文件

+----------------------------+----------------+-------------+----------------+-------------+---------+
| Name                       | Size           │ Pages       │ Cached Size    │ Cached Pages│ Percent │
|----------------------------+----------------+-------------+----------------+-------------+---------|
| /root/all.dump             | 22.097G        | 5792528     | 15.729G        | 4123232     | 71.182  |
| /root/xxxxxx301_9999.dump3 | 5.907G         | 1548592     | 5.907G         | 1548592     | 100.000 |
| /root/xxxxxx301_9999.dump2 | 5.907G         | 1548592     | 5.463G         | 1432089     | 92.477  |
| /root/xxxxxx301_9999.dump4 | 5.907G         | 1548592     | 4.382G         | 1148800     | 74.184  |
| /root/xxxxxx301_9999.dump  | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
| /root/xxxxxx301_9999.dump5 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
|----------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum                        │ 51.634G        │ 13535488    │ 31.482G        │ 8252713     │ 60.971  │
+----------------------------+----------------+-------------+----------------+-------------+---------+

最终情况  第一个 第二个读入的完全卸载了内存 第三个卸载了一部分  合并形成的那文件也只有一部分在内存里面. 

+----------------------------+----------------+-------------+----------------+-------------+---------+
| Name                       | Size           │ Pages       │ Cached Size    │ Cached Pages│ Percent │
|----------------------------+----------------+-------------+----------------+-------------+---------|
| /root/all.dump             | 29.537G        | 7742960     | 15.770G        | 4133969     | 53.390  |
| /root/xxxxxx301_9999.dump4 | 5.907G         | 1548592     | 5.907G         | 1548592     | 100.000 |
| /root/xxxxxx301_9999.dump5 | 5.907G         | 1548592     | 5.907G         | 1548592     | 100.000 |
| /root/xxxxxx301_9999.dump3 | 5.907G         | 1548592     | 3.947G         | 1034672     | 66.814  |
| /root/xxxxxx301_9999.dump  | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
| /root/xxxxxx301_9999.dump2 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
|----------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum                        │ 59.074G        │ 15485920    │ 31.532G        │ 8265825     │ 53.376  │
+----------------------------+----------------+-------------+----------------+-------------+---------+


内核参数的验证

sysctl -a |grep min |grep free
vm.min_free_kbytes = 27729
修改默认值之前的 free -m 结果 free 最小值为 359MB
              total        used        free      shared  buff/cache   available
Mem:          47005       13795         359          20       32850       32736
Swap:          8079          13        8066

echo 4096000 >/proc/sys/vm/min_free_kbytes
将最小的可用内存修改为4GB 再次观察

[root@oracle12c ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          47005       13783        5397          20       27824       21958
Swap:          8079          18        8061

内存在靠近4GB free的时候就开始 回收page caches 了
但是感觉这个参数意义不大, 只是监控效果好看. 并且会造成内存资源的浪费. 

修改之前和之后 文件缓存的最大比率为:
修改之前 53.376% 修改之后 43.016%

之后的结果为: 
+----------------------------+----------------+-------------+----------------+-------------+---------+
| Name                       | Size           │ Pages       │ Cached Size    │ Cached Pages│ Percent │
|----------------------------+----------------+-------------+----------------+-------------+---------|
| /root/all.dump             | 29.537G        | 7742960     | 12.712G        | 3332341     | 43.037  |
| /root/xxxxxx301_9999.dump5 | 5.907G         | 1548592     | 5.907G         | 1548592     | 100.000 |
| /root/xxxxxx301_9999.dump4 | 5.907G         | 1548592     | 5.907G         | 1548592     | 100.000 |
| /root/xxxxxx301_9999.dump3 | 5.907G         | 1548592     | 905.688M       | 231856      | 14.972  |
| /root/xxxxxx301_9999.dump  | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
| /root/xxxxxx301_9999.dump2 | 5.907G         | 1548592     | 0B             | 0           | 0.000   |
|----------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum                        │ 59.074G        │ 15485920    │ 25.411G        │ 6661381     │ 43.016  │
+----------------------------+----------------+-------------+----------------+-------------+---------+

标签:9999,drop,free,学习,xxxxxx301,5.907,root,1548592,caches
From: https://www.cnblogs.com/jinanxiaolaohu/p/17802665.html

相关文章

  • 并查集学习笔记
    简介这里引用OI-wiki上的内容:并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。顾名思义,并查集支持两种操作:合并(Union):合并两个元素所属集合(合并对应的树)查询(Find):查询某个元素所属集合(查询对应的树的根节点),......
  • 学习随笔(设计模式:建造者模式)
    内容今天学习了建造者模式。1.建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2.简单来说就是一个类的所有的特性方法与这个类对象的构建分离3.本来觉得有点类似于工厂模式,但细想又不太一样。工厂模式是创建一个类,这个类用来创新用户......
  • 学习指南:如何快速上手媒体生态一致体验开发
    过去开发者们在使用多媒体能力时,往往会遇到这样的问题,比如:为什么我开发的相机不如系统相机的效果好?为什么我的应用和其他的音乐一起发声了,我要怎么处理?以及我应该怎么做才能在系统的播控中心里可以看到呢?对于开发者的这些疑问,HarmonyOS通过提供简单易用体验一致的生态接口,使得开发......
  • 一 Linux 学习
    远程登录一台linux后,怎么查看是什么发行版。一般来说 Linux著名系统分两大类  Redhat系列:Redhat centosfedora  Debian系列:DebianUbuntu   1.有yum命令的是Redhat系列,有apt-get是Debian系列  2.使用lsb_release-a 命令。        可......
  • 第十三章学习笔记
    第十三章学习笔记摘要本章论述了TCP/IP和网络编程,分为两个部分。第一部分论述了TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器;介绍了TCP/P网络中的UDP和TCP协议、端口号和数据流;阐述了服务器-客户机计算模型和套接字编程接口;通过使用UDP和TC......
  • ObjectScript 语法学习一
    简介ObjectScript是一种对象编程语言,专为在InterSystemsIRIS®上快速开发复杂的业务应用程序而设计.作用ObjectScript源代码被编译为在InterSystemsIRIS虚拟机内执行的目标代码。该目标代码针对业务应用程序中常见的操作进行了高度优化,包括字符串操作和数据库访问。......
  • JVM深入学习-ClassLoader篇(一)
    初识JVM---ClassLoader深入理解ClassLoader、SPI机制Class对象的理解java在诞生之初,就有一次编译到处运行的名言,今天我们来探究一下,从java代码到class到运行,JVM中的ClassLoader充当一个什么样的角色。一个简单的JVM流程图(简单了解)流程图.jpg从位置角度理解JVM:就JVM在......
  • 信息安全系统设计与实现课程第十三章学习笔记
    一、知识点归纳1网络编程简介TCP/IP协议、UDP和TCP协议、服务器-客户机计算、HTTP和Web页面、动态Web页面的PHP和CGI编程2TCP/IP协议IPv432位地址IPv6128位地址TCP/IP协议顶层是使用TCP/IP的应用程序,用于登录到远程主机的ssh,用于交换电子邮件的mail、用于Web页面的ht......
  • rsync命令学习
    一、命令介绍sync命令:刷新文件系统缓存,强制将修改过的数据块写入磁盘async命令:将数据先缓存在缓冲区,再周期性同步到磁盘,性能较好,但是数据容易丢失rsync:远程同步rsync命令的特点:1.可以保留原有文件权限,文件属组属主,时间链接文件,文件属性等信息2.传输效率高,只比较变化的数据3......
  • 通过PowerShellPlus示例脚本学习PowerShell-通过WIndows集成验证登录SQLServer
    ##=====================================================================##Title:Connect-MSSQL-IPWindowsAuth##Description:ConnecttoSQLServerusingIPaddress,instanceand##Windowsauthentication##Author:Idera......