银河麒麟高级服务器操作系统V10SP2(ARM)min_free_kbytes值为固定值问题
一、基本环境
1.1 操作系统版本信息
############## Kylin Linux Version #################
Release:
Kylin Linux Advanced Server release V10 (Sword)
Kernel:
4.19.90-25.35.v2101.ky10.aarch64
Build:
Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-aarch64-Build09/20210524
#################################################
二、问题排查分析
2.1 查看/etc/目录下文件内容是否涉及min_free_kbytes相关
grep -inr "min_free_kbytes" /etc/
2.2 查看/home/目录下文件内容是否涉及min_free_kbytes相关
grep -inr "min_free_kbytes" /home/
2.3 本地测试
本地测试使用提供的qcow2镜像未发现问题
2.4 进入单用户查看initramfs-xxx.img文件中参数定义
(1)重启系统,在grub上面linux行尾添加参数"rd.break=initqueue"
(2)执行命令:lsinitrd /boot/iniramfs-$(uname -r).img -f /etc/sysctl.conf
#查看发现initramfs-xxx.img里面sysctl.conf文件中min_free_kbytes为200万
三、问题原因
initramfs-xxx.img文件中定义了vm.min_free_kbytes = 2000000,导致系统最后开机的时候查看的值为200万。
在/etc/sysctl.conf文件中指定了vm.min_free_kbytes = 2000000之后,在安装内核生成的img文件或者使用dracut命令更新的时候,会把参数同步到initramfs-xxx.img文件当中,导致即使后续删除了/etc/sysctl.conf文件中vm.min_free_kbytes = 2000000参数,该值还是2000000的情况。
四、后续建议
vm.min_free_kbytes是一个Linux重要的内核参数,用于控制系统可用内存的最小空闲大小。它指定了内核应该保留的空闲内存页面的数量(以KB为单位),以便能够及时满足系统的需要。因此如若要手动设置min_free_kbytes,我们通常建议将其设置为系统总内存的0.5%-1%,这样可以更好地维护系统的性能和稳定性。
4.1 方案一
使用系统默认生成的vm.min_free_kbytes参数
(1)在确保/etc/sysctl.conf文件中没有指定vm.min_free_kbytes参数的情况下,备份/boot目录下对应内核的initramfs-xxx.img文件。
#务必做好备份操作,防止更新失败,只有一个可用内核的情况下,备份文件提供了恢复保障。
(2)刷新步骤
dracut --force --fstab --early-microcode --kmoddir /lib/modules/4.19.90-25.35.v2101.ky10.aarch64 --kver=4.19.90-25.35.v2101.ky10.aarch64
#内核版本根据实际更新的内核为准(完整的名字可以查看/lib/modules/目录下的目录名)
4.2 方案二
采用系统侧的建议(配置为总内存的0.5%-1%)
在/etc/sysctl.conf文件中配置vm.min_free_kbytes = {总内存的0.5%-1%}即可。不用刷新initramfs-xxx.img文件,系统最后会以/etc/sysctl.conf文件中指定的参数为准,initramfs-xxx.img文件中的定义无影响。