1 简介
vm.min_free_kbytes是用于 linux 内核的 vm.min_free_kbytes sysctl 可调参数。
2 vm.min_free_kbytes如何工作
- 系统需要内存分配以确保系统本身的正常运行。
- 如果内核允许分配所有内存,则在需要内存进行常规操作以保持操作系统平稳运行时,它可能会遇到困难。
- 这就是内核提供可调vm.min_free_kbytes 的原因。
- 该可调参数将强制内核的内存管理器保留至少 x 量的空闲内存。
这是来自linux内核文档的官方定义:
- 这用于强制 linux vm 保持最小数量的可用千字节。
- vm 使用这个数字来计算系统中每个lowmem 区域的 watermark[wmark_min] 值。
- 每个 lowmem 区域都会根据其大小按比例获得一些保留的空闲页面。
- 满足 pf_memalloc 分配需要一些最小的内存量;如果您将其设置为低于1024kb,您的系统将被巧妙地破坏,并且在高负载下容易死锁。
- 设置得太高会立即 oom 你的机器。
3 vm.min_free_kbytes验证
创建了一台约分配7g-8g左右内存的虚拟机,系统版本使用统信操作系统v20 1020a。
- 首先用free命令查看内存使用情况:

查看上面的附图可以得到总内存在约7.9g。使用了532mb,6.9g内存可用,491mb用于缓冲区高速缓存。并且有7.1g的内存可用。
- 看一下vm.min_free_kbytes默认值:

- 调整vm.min_free_kbytes值,看看对系统内存有什么影响:

- 可以看到参数值修改成约1.5gb,已经生效,使用free命令查看一下:

参数值修改不会更改可用内存和缓冲区高速缓存,但是显示为可用内存量从7182mb减少到4985mb 。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论