麒麟OS需启用虚拟内存过载保护:将vm.overcommit_memory设为2、vm.overcommit_ratio设为80,禁用zram并启用磁盘Swap,使内核按“物理内存×80%+Swap大小”严格限制内存分配,避免OOM Killer误杀进程。

麒麟OS在物理内存与Swap总和即将耗尽时,若未启用虚拟内存过载保护,内核可能直接触发OOM Killer强制终止进程,导致关键服务中断。该保护机制通过调整vm.overcommit_memory和vm.overcommit_ratio参数,使内核在分配内存前进行更严格的总量预判,避免虚假承诺式分配。
配置内核内存过度提交策略
第一步:以root身份打开终端,执行sysctl vm.overcommit_memory确认当前值——默认为0(启发式判断),需改为1或2才能启用确定性过载保护。
第二步:编辑内核参数配置文件:vim /etc/sysctl.conf,在末尾新增两行:
vm.overcommit_memory = 2
vm.overcommit_ratio = 80
第三步:执行sysctl -p立即加载新参数。此时内核将按公式计算最大可提交内存:物理内存×80% + Swap大小。超出该值的malloc()调用会直接返回ENOMEM,而非先分配再OOM Kill。
第四步:验证生效状态:sysctl vm.overcommit_memory vm.overcommit_ratio,输出必须严格匹配你写入的数值。若仍显示0,则说明文件路径错误或权限不足。
禁用zram并启用传统Swap作为保护基础
银河麒麟V10 SP2及更高版本默认启用zram压缩内存,但它不参与vm.overcommit_memory=2的总量核算,会导致保护失效。必须停用zram、启用磁盘Swap后,过载保护才真正起效。
方法一:临时停用zram
sudo swapoff /dev/zram0
sudo modprobe -r zram
方法二:永久禁用zram服务
sudo systemctl mask zram-generator.service
sudo systemctl stop zram-generator.service
【执行前必须已配置好磁盘Swap文件或分区】否则停用zram后系统将完全失去交换空间,内存满载时立即崩溃。
验证过载保护是否实际生效
① 创建一个消耗内存的测试进程:python3 -c "a = []; [a.append('x' * 1024**2) for _ in range(10000)]"
② 在另一终端中实时观察:watch -n 1 'free -h | grep -E "(Mem|Swap)"'
③ 当可用内存(available)降至接近0且Swap usage持续上升时,若Python进程抛出MemoryError而非被kill -9终止,说明vm.overcommit_memory=2已接管控制权。
④ 检查OOM事件日志:dmesg -T | grep -i "killed process",输出为空即表示OOM Killer未触发,保护机制正在运行。

















