Admin

OOM 防卡死方案 (Manjaro)
2026年7月20日 17:43 1 0 0 0

OOM 防卡死方案 (Manjaro)

方案:zram + earlyoom

1. zram 压缩交换

利用部分内存压缩作为交换,比磁盘 swap 快得多。

  1. # 安装
  2. sudo pacman -S zram-generator # 与新内核 (6.18) 不兼容,改用手动 service
  3. # 手动 service 方案
  4. sudo tee /etc/systemd/system/zram-swap.service << 'EOF'
  5. [Unit]
  6. Description=ZRAM swap
  7. After=local-fs.target
  8. [Service]
  9. Type=oneshot
  10. ExecStartPre=/sbin/modprobe zram num_devices=1
  11. ExecStart=/bin/sh -c 'echo lz4 > /sys/block/zram0/comp_algorithm; echo 16G > /sys/block/zram0/disksize; mkswap /dev/zram0; swapon -p 100 /dev/zram0'
  12. ExecStop=/sbin/swapoff /dev/zram0
  13. RemainAfterExit=yes
  14. [Install]
  15. WantedBy=multi-user.target
  16. EOF
  17. sudo systemctl daemon-reload
  18. sudo systemctl enable --now zram-swap

实时调整大小(先 reset):

  1. sudo swapoff /dev/zram0
  2. echo 1 | sudo tee /sys/block/zram0/reset
  3. echo lz4 | sudo tee /sys/block/zram0/comp_algorithm
  4. echo 16G | sudo tee /sys/block/zram0/disksize
  5. sudo mkswap /dev/zram0
  6. sudo swapon -p 100 /dev/zram0

2. earlyoom — 内存不足主动杀进程

  1. sudo pacman -S earlyoom
  2. sudo systemctl enable --now earlyoom

默认配置:

  • 内存剩余 ≤ 10% 时发 SIGTERM
  • 内存剩余 ≤ 5% 时发 SIGKILL
  • 白名单排除 systemd / init / Xorg / sshd

3. 可选:磁盘 swap 作最后兜底

优先级低于 zram,zram 满后才写入磁盘:

  1. sudo fallocate -l 8G /swapfile
  2. sudo chmod 600 /swapfile
  3. sudo mkswap /swapfile
  4. sudo swapon -p 0 /swapfile
  5. echo '/swapfile none swap defaults,pri=0 0' | sudo tee -a /etc/fstab

最终状态

  1. zramctl:
  2. NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
  3. /dev/zram0 lz4 15.5G 4K 64B 20K [SWAP]
  4. swapon:
  5. NAME TYPE SIZE USED PRIO
  6. /dev/zram0 partition 15.5G 0B 100
  7. 内存: 30G / 22G 使用
  8. 交换: 15G / 0B 使用
  9. earlyoom 运行中,内存告急时自动干预。
发布内容,请遵守相关法律法规。
评论