Skip to content

内存优化与swap

小米平板5这个机器的内存是个硬伤,在没魔改的情况下的情况下内存太小,多开应用会直接爆内存。所以我们需要点手段给这个机器的内存上点魔法,如果你是6GB的机型,那这一步是必做的;如果你是8GB的机器,那也可以根据实际情况来调整或者不做。

Linux的大杀器——zram

在Linux下有zram功能,支持压缩内存,使用zstd算法时能在压缩程度和性能损耗中找到一个平衡点,对于CPU有盈余但内存吃紧的机器,zram能显著减少卡顿。

首先安装zram管理器,执行

bash
sudo pacman -S zram-generator

创建配置文件,执行

bash
sudo nano /etc/systemd/zram-generator.conf

写入以下配置

conf
[zram0]
zram-size = ram * 0.8
compression-algorithm = zstd
swap-priority = 100
fs-type = swap

我的机器是6GB版本,所以我开了80%的内存空间作为zram,8GB版本可以开一半。

执行命令使之立即生效

bash
sudo systemctl daemon-reload
sudo systemctl start /dev/zram0
# 查看一下zram状态
zramctl

如果你觉得CPU压力太大,可以换成lz4压缩算法,压缩量没那么大,但是能减轻CPU负担。

配置虚拟内存(swap)

如果你学过OS课程,那虚拟内存这一部分你肯定再熟悉不过了,通过在硬盘上开出一块空间来和内存内容做交换,从而在逻辑上拓展内存空间,缺点就是读写会伤害硬盘,而且速度也不够快。但是对于内存捉急的机器,swap还是有必要的,只是我们不能把swap开的太优先(尽可能不用)。我实测我这台机器的swap文件用的很少,所以其实帮助并不是特别大。

先创建一个swap文件(我创建的是4G,但是可以根据实际情况调整),执行命令

bash
sudo fallocate -l 4G /swapfile

给swapfile设置读写权限,然后格式化并挂载启用,执行

bash
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon -p -2 /swapfile

这里的-2是优先级,要小于上文中zram的优先级,这样才不会先行调用swap.

验证一下我们的成果

bash
swapon --show

输出应该类似这样:

NAME       TYPE      SIZE USED PRIO
/swapfile  file        4G   0B   -2
/dev/zram0 partition 4.2G 2.3G  100

最后我们要写入fstab的挂载信息里,使得swap永久生效

bash
# 备份一下fstab
sudo cp /etc/fstab /etc/fstab.bak

# 写入永久配置
echo '/swapfile none swap defaults,pri=-2 0 0' | sudo tee -a /etc/fstab

到这里我们解决了这个机器OOM的问题,获得了一个不错的使用体验。