Linux内存,PageFault与SwapOut

Linux内存,PageFault与SwapOut,第1张

“内存并不一定总是快”

Linux 中内存主要有匿名内存和 Page Cache 两种。

Linux *** 作系统内存管理策略是会尽可能的利用内存来做各种缓存,所以一般来说服务器所谓的free内存都会较少,当应用alloc申请内存的时候,如果free内存不足就会引发内存回收,这就是所谓的PageFault缺页,这时候系统会先使用异步方式的后台回收来提高应用申请内存这个 *** 作的响应速度。但是如果应用申请内存的速度大于系统后台回收的速度的话,就会进入所谓直接回收(Direct Reclaim)模式,这是一个同步的过程,应用会自旋等待内存回收完毕,产生比较大的延迟。见下图:

另一方面,内核会回收匿名内存页,并将其置换到磁盘里(这是Linux所谓虚拟内存的管理方式,磁盘上的这部分用来跟内存做交换的空间称为swap空间),匿名内存页一旦被换出然后再次被访问的时候,就会产生文件IO了(要从swap空间里把页加载回内存里),这也会导致比较大的延迟。见下图:

vm.extra_free_kbytes 和 vm.swappiness 两个内核参数可以针对PageFault和SwapOut两种内存访问延迟做调优。mlock 系统调用可以让应用程序“锁定”一块内存空间而不被内核swap出去。

万亿级数据洪峰下的分布式消息引擎-InfoQ

后记:

这篇小文来自于学习RocketMQ开发团队的技术分享文章(见参考),里边的“内存没那么快”观点笔者认为更确切说法应该是“内存并不总是那么快”,里边的Linux内存管理的一小段说明加深了笔者对之前了解的概念的理解,这些东西可能平时工作未必有什么用,但了解底层的东西总是会让人产生求知求所得的愉悦感受。看了阿里褚霸的个人背景简介,“14年c开发经验, 12年网络开发经验, 3年Linux内核开发”,他也遇到过“底层 IO(Input/Output) 技术。IO 技术涉及面非常广,驱动,块设备,文件系统,内存关系等等” ,做专家终归是要走入底层,到最后考验的是对系统、对计算机的理解。本文很水,而脚下这条路不知能走多远,但是想想不为什么就算只为求知的喜悦我也是愿意走下去的啊。这也是我为什么要建“系统底层”这个专题

使用getconf命令即可查看pagesize的大小 ,命令如下:

getcon PAGESIZE

执行结果如下图所示:

扩展:getconf命令详解

用途:将系统配置变量值写入标准输出。

语法:getconf [ -v specification ] [ SystemwideConfiguration | PathConfiguration PathName ] [ DeviceVariable DeviceName ]

getconf -a

参数:

-a 规格    显示了指定规格及版本,其配置变量等待确定。如果该标志未被指定,返回值将响应一个实现缺省值 XBS5 的相应的编辑环境。

-v    将全部系统配置变量值写入标准输出。  

参数

PathName    为 PathConfiguration 参数指定路径名。  

SystemwideConfiguration    指定一个系统配置变量。  

PathConfiguration    指定一个系统路径配置变量。  

DeviceName    指定一个设备路径名。  

DeviceVariable    指定一个设备变量。  

当列入下列的表格中的第一列符号被用作 system_var  *** 作数时,getconf 将产生与用第二列的值调用 confstr 时相同的值:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7342826.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存