环境: Ubuntu 22.04.3 LTS
ZRAM 的原理是:
- 将一块内存区域作为虚拟的块设备,
- 压缩页面交换数据,
- 存储在内存中,
- 释放物理内存空间
- 可用的物理内存就能随之变多
开启/加载 zRAM 模块
sudo modprobe zram num_devices=1
lsmod | grep zram
安装zram-config
sudo apt install zram-config
加载zram模块
sudo modprobe zram
更新initramfs以加载zram模块(可选)
sudo update-initramfs -u
使用sudo
命令启用zram-config服务:
sudo systemctl enable zram-config
使用sudo
命令启动zram-config服务:
sudo systemctl start zram-config
重启zram-config服务以应用更改:(释放内存)
sudo service zram-config restart
修改swappiness参数
sudo vim /etc/sysctl.conf
末尾添加
vm.swappiness = 180
应用新的swappiness设置:
sudo sysctl -p /etc/sysctl.conf
启用 ZRAM 内核模块
echo "zram" | sudo tee /etc/modules-load.d/zram.conf
echo "options zram num_devices=1" | sudo tee /etc/modprobe.d/zram.conf
使其立即生效
sudo modprobe zram
配置 zram0 设备
查看默认压缩算法,带括号就是默认的
cat /sys/block/zram0/comp_algorithm
查看zram大小
cat /sys/block/zram0/disksize
配置持久化
lz4hc
为压缩算法
2G
为zram大小,推荐大小为物理内存的一半
echo 'KERNEL=="zram0", ATTR{comp_algorithm}="lz4hc", ATTR{disksize}="2G", TAG+="systemd"' | sudo tee /etc/udev/rules.d/99-zram.rules
然后重载模块
sudo modprobe zram
将 zram0 设备配置为 Swap
sudo mkswap /dev/zram0
sudo swapon /dev/zram0
开机自启
sudo vim /etc/systemd/system/zram.service
添加内容
[Unit]
Description=ZRAM
BindsTo=dev-zram0.device
After=dev-zram0.device
[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/sbin/mkswap /dev/zram0
ExecStart=/sbin/swapon -p 2 /dev/zram0
ExecStop=/sbin/swapoff /dev/zram0
[Install]
WantedBy=multi-user.target
重载配置文件
systemctl daemon-reload
sudo systemctl enable zram
最后重启服务器
reboot
查看zram设备
ls /dev/zram*
查看已加载的 ZRAM 模块
lsmod | grep zram
显示已启用的交换空间
swapon --show
查看zram0
设备
lsblk
调整优先级
目的是让zram优先使用
先关闭swap
sudo swapoff -a
再开启swap
sudo swapon -a
查看
swapon --show
输出信息
vagrant@ubuntu:~$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 982M 0B 5
/swap.img file 2G 0B -2
-2
:表示这个交换空间被标记为不活跃的,也就是说,这个交换空间不会被默认使用
5
:这是一个正整数优先级,具有默认的优先级。当系统需要进行交换时,会按照优先级的顺序逐个使用这些交换空间。
测压
安装stress工具
sudo apt install stress
测试
stress --vm 1 --vm-bytes 2G --timeout 60s
这将启动一个stress进程,它会尝试分配2GB的内存并保持该状态持续60秒
因为我的物理内存是2G,所以我使用2G测试,当zram耗尽时,就会启用swap
可以另外开一个窗口,使用top命令查看系统状态
top
ZRAM 分析
zramctl --output-all