当然有!而且这其实是应对“内存不够,但又怕 OOM 杀进程”的绝佳妥协方案。
这个方案叫做 “分级 Swap” (Tiered Swap)。
原理是什么?
核心逻辑是利用 优先级 (Priority):
- 我们让 zram 的优先级最高(之前我们设置了
PRIORITY=100)。
- 我们让 传统硬盘 Swap 的优先级变低(比如设为
10)。
运行效果:当内存不够时,系统会优先把冷数据塞进 zram,享受极速压缩,系统保持丝滑。直到 zram 被彻底塞满(就像你刚才截图里的情况),系统才会无可奈何地把多出来的数据溢出到硬盘 Swap 里。
这样既保证了平时的高性能,又给了 Immich 这种庞然大物一个“兜底”的缓冲池,防止它被直接杀掉。
如何配置“zram + 硬盘 Swap”双重保险?
之前我们把你 /etc/fstab 里的硬盘 swap 给注释掉了,现在我们把它恢复回来,并且明确指定它为低优先级。
第一步:重新编辑配置文件
运行以下命令打开文件:
sudo nano /etc/fstab
第二步:修改 Swap 那一行
找到你之前注释掉的那行 #/swapfile none swap sw 0 0。
把它改成下面这样(去掉 # 号,并且在 sw 后面加上 ,pri=10):
/swapfile none swap sw,pri=10 0 0
(注意 sw 和 ,pri=10 之间没有空格。我们只恢复 /swapfile 这一个就够用了,不需要恢复 /swapfile2)
保存退出(按 Ctrl+O 回车保存,Ctrl+X 退出)。
第三步:重新挂载 Swap
运行命令让刚才的修改立即生效:
sudo swapon -a
第四步:验证最终效果
运行以下命令查看所有 Swap 的状态和优先级:
sudo swapon --show
你会看到类似这样的完美输出:
| NAME |
TYPE |
SIZE |
USED |
PRIO |
| /dev/zram0 |
partition |
3.7G |
3.7G |
100 |
| /swapfile |
file |
4G |
0B |
10 |
再运行 free -h,你会发现你的总 Swap 变成了 3.7G + 硬盘Swap容量。
总结
这就是终极的折中方案:zram 冲锋陷阵保性能,硬盘 swap 坐镇后方防崩溃。 当你看到硬盘 Swap 开始有被使用的迹象时,系统确实会变卡,但至少 Immich 活下来了!