swapoff很慢问题的优化

起因

因为现在用的电脑只有24G,然而IDE和浏览器之类的都是内存大户,所以不是很够用,为了避免OOM,我给开了32G的swap,但实际上用到8个G左右就卡得不行了。所以有时我会把这些内存大户暂时关闭,然后执行一次swapoff清理一下内存使用。但是今天居然碰到这个操作需要执行10分钟以上……平时最多几十秒而已。

万事不决问AI

当时实际的情况是:物理内存已经空出来15G左右,swap还有6个G,swapoff的时候CPU空闲得很很,硬盘也是调整SSD,没有理由这么慢。

AI说了一堆理由,然而这个不重要,重点是如何改善。

改进方案

AI提了一堆方案,我挑了一些可能有点效果的:

  • 降低系统对swap的积极性,并且提高系统回收内存的积极性
# 修改/etc/sysctl.conf,增加以下配置:
vm.swappiness=10  # swap积极性,默认是60
vm.watermark_scale_factor=50  # 回收积极性,默认是10
# 立即生效
sudo sysctl -p
  • 开启zswap
# 立即打开
echo 1 | sudo tee /sys/module/zswap/parameters/enabled
# 永久开启,通常需要修改 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 中加入 zswap.enabled=1,然后
sudo update-grub
# 修改压缩算法
echo zstd | sudo tee /sys/module/zswap/parameters/compressor  # 默认是lzo,建议改为zstd或lz4
  • 改用drop_caches来刷新内存
sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

观察一段时间看看。

推送到[go4pro.org]