我的 VPS 小鸡内存捉襟见肘,如何不花钱“扩容”?我采用了 zram 的方案。
原理
用我自己的理解,简单来说就是:本来是多少大小的内存,通过压缩算法,变成了若干倍。作为代价是需要消耗 CPU 资源来实现算法。
正好我的使用场景整体 CPU 很低,内存占用偏高,符合这个场景。
实现
安装 zram-tools
apt install zram-tools -y
编辑配置 /etc/default/zramswap
ALGO=zstd
# speed: lz4 > zstd > lzo
# compression: zstd > lzo > lz4
PERCENTAGE=100
- ALGO为压缩算法,根据速率和压缩率综合选择,我配置成了zstd。
- PERCENT为将百分之几的物理内存用作 zram,默认是50%,网上建议值是70-80%,我激进地配置了100%。
重启服务
systemctl status zramswap.service
配置系统参数
编辑 /etc/sysctl.conf,增加一行
vm.swappiness 参数 = 100
不过作为一个好习惯,一般不直接改系统文件,而是在 /etc/sysctl.d 目录下新建一个 custom.conf 文件,内容一样是上面那一行。
然后使用 sysctl --system 让它生效。
vm.swappiness 参数的作用是把百分之几的概率将数据从物理内存迁移到 swap。默认值是60,一般优化成10,即尽量将数据保留在物理内存,来提升系统速度。但在本场景下,为了将数据尽量迁移到 swap,也就是 zram,设置为100,反正 zram 实体还是物理内存,读写速度几乎不变,只是多了让 CPU 压缩一下的消耗。
观察
zramctl
结果如下:
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd 961.2M 91M 17.2M 18.8M 2 [SWAP]
即:zram 的大小是961.2M,原始数据是91M,压缩后是17.2M,加上开销是18.8M,大约压缩了5倍。
而 CPU 从原本~17%增长到~21%,基本可以忽略。
