产品:openEuler
版本:openEuler22.03 LTS
分类:内核/内存
来源:现网
[背景及现象描述]
客户测试时发现应用功能存在卡顿现象,经过排查发现鲲鹏服务器上大量使用了swap,导致系统卡顿,而在x86上几乎没有使用swap分区。
[定位过程]
X86+centOS
X86+openEuler
对比同架构不同OS的数据信息,内存使用总量接近,swap分区大小与buff/cache大小不同。判断为不同OS下的swap分区使用机制不同导致。
查看进程swappiness参数发现,虽然vm.swappiness参数都是5,但是openEuler环境部分进程实际swappiness仍为默认值60,swappiness修改未生效。
[问题根因]
openEuler系统态或用户态的进程运行在/sys/fs/cgroup/memory/system.slice或/sys/fs/cgroup/memory/user.slice下,创建时自动继承根目录的swappiness值。后续修改vm.swappiness,仅会修改根目录/sys/fs/cgroup/memory/的swappiness值,原先已在运行的子进程不受影响。而centOS修改根目录swappiness,所有进程都会随之修改。
centOS与openEuler的systemd的版本不一致,openEuler默认会配置systemd控制memory的参数。systemd当前没有统一接口可以配置,因此无法使用一个接口统一修改cgroup memory的参数。
[解决方法]
透明大页调优手段:调整openEuler操作系统的transparent_hugepage参数,从默认【always】模式更改为【madvise】模式,与x86+centos的透明大页配置一致。
具体操作:
vi /etc/default/grub
在GRUB_CMDLINE_LINUX行增加"transparent_hugepage=madvise"
grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
reboot
swappiness调优手段:openEuler修改全局配置swappiness=0。
具体操作:
根目录配置:
(1) 在/etc/sysctl.conf文件中添加:vm.swappiness=0
(2) sysctl -p
子目录配置:
修改oe默认的配置,使cgroup/memory目录下没有额外的文件夹(system.slice、user.slice等),与x86+centos的systemd配置一致:
(1) /etc/systemd/system.conf 将DefaultMemoryAccounting=yes那行取消注释,yes改成no
(2) /usr/lib/systemd/system/user@.service 将Delegate=pids,memory删掉memory
(3) cd /usr/lib/systemd/system grep -rin memory grep -rin Delegate 将Delegate改成no 或者 去掉memory
(4) systemctl daemon-reload 使systemd生效
最终鲲鹏单CPU通过调整transparent_hugepage=madvise,swappiness=0两项参数后,业务平稳运行,操作流畅。