返回

ubuntu开启zram彻底解决高I/O引起的卡顿,复制文件无比流畅

   
摘要GPT
摘要小助理暂时失联跑路啦……😜

环境: Ubuntu 22.04.3 LTS

ZRAM 的原理是:

  1. 将一块内存区域作为虚拟的块设备,
  2. 压缩页面交换数据,
  3. 存储在内存中,
  4. 释放物理内存空间
  5. 可用的物理内存就能随之变多

开启/加载 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
知识共享许可证 CC BY-NC-SA 4.0
最后更新于 2024-06-14 00:32
使用 Hugo 构建
主题 hugo-magic小洋葱 魔改 由 Jimmy 设计
Written by Human, Not by AI