服务器搭建记录 · Zram的配置

一些介绍

简单记录一下我服务器的搭建过程~留作日后备用。

这台服务器配置为2C1G,地区香港(不用备案),系统使用Ubuntu。每月1T流量,但是带宽很低(日常3M)。

服务器中的大部分内容都采用Docker,部署方便且易迁移。只有Nginx、PHP、MariaDB非Docker部署。

开始搭建

开启Zram&Swap

因为只有1G内存,所以有必要开启Zram与Swap来减小内存占用。

确认内核是否支持&有无启用 ZRAM

ZRAM 的原理是划分一块内存区域作为虚拟的块设备,当系统内存不足出现页面交换时,可以将原本应该交换出去的页压缩后放在内存中,由于部分被『交换出去』的页得到了压缩,因此可用的物理内存就能随之变多。

在配置之前,需要先确认一下自己的内核版本是否在 3.14 以上,部分 VPS 由于依旧使用 XenOpenVZ 等虚拟/容器化技术,内核版本往往卡在 2.6,那么这样的机器是无法开启 ZRAM 的。但根据内核版本判断毕竟不可靠,如 CentOS 7,虽然内核版本是 3.10,却支持 ZRAM,也有极少数发行版或嵌入式 Linux 为了降低资源占用,选择不编译 ZRAM,因此最好使用 modinfo 命令来检查一下有无 ZRAM 支持。部分发行版会默认启用但不配置 ZRAM,可以使用lsmod检查 ZRAM 是否启用:

modinfo zram
lsmod | grep zram

启用 ZRAM 内核模块&配置 zram0 设备

新建/etc/modprobe.d/zram.conf,在其中写入以下内容,即可配置一个 ZRAM 块设备,重启后生效。

options zram num_devices=1

新建/etc/udev/rules.d/99-zram.rules,在其中写入如下内容:

KERNEL=="zram0",ATTR{comp_algorithm}="zstd",ATTR{disksize}="1G",TAG+="systemd"

理想情况下就能获得RAM - (ZRAM / 2) + ZRAM以上的内存空间。可以根据自己的实际情况选择 ZRAM 空间大小。

将 zram0 设备配置为 Swap

新建一个文件/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

接下来运行如下命令启用并查看 Swap 状态:

systemctl daemon-reload
systemctl enable zram --now
swapon -s

如果看到存在名为/dev/zram0的设备,恭喜你!现在 ZRAM 就已经配置完成并能实现自启动了~

配置双层 Swap

配置了 ZRAM,并将其设置为了 Swap,但此时 ZRAM 依旧是不生效的。因为/.swapfile的优先级高于/dev/zram0,这导致当 Linux 需要交换内存时,依旧会优先使用/.swapfile,而非 ZRAM。

解决这个问题可以通过两种方式:禁用 Swapfile,或者降低 Swapfile 的优先级,这里我们配置双层 Swap,当高优先级的 ZRAM 耗尽后,会继续使用低优先级的 Swapfile。在配置Swap时,保证执行swapon时携带-p参数即可,数字越低,优先级越低。对于 ZRAM 同理。

配置方式如下:

在根目录下创建一个2GB大小的Swap文件并格式化

sudo fallocate -l 2G /swapfile
sudo mkswap /swapfile

启用并在启动时自动挂载Swap文件

sudo swapon /swapfile
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

 ZRAM 调优

可以通过如下命令获取支持的算法,并根据自己的需求选择合适的压缩算法:

cat /sys/block/zram0/comp_algorithm

page-cluster设置为 0,避免内存带宽和 CPU 资源的浪费,同时配置Swap的积极性。swappiness参数决定了kswapd0线程回收内存的策略。由于存在两类可被回收的内存页:匿名页和文件页,swappiness决定的则是匿名页相比较文件页被换出的比率,因为文件页的换出是直接将其回写到磁盘或销毁,这一参数也可以被解释为『Linux 在内存不足时回收匿名页的激进程度』。

编辑/etc/sysctl.conf,在结尾处新增行:

vm.page-cluster=0
# 默认是 500(介于 0 和 1000 之间的值)
vm.extfrag_threshold=0
# 默认是 60
vm.swappiness=100

执行sysctl -p,即可生效,无需重启。

参考资料:

配置 ZRAM,实现 Linux 下的内存压缩,零成本低开销获得成倍内存扩增
版权声明:此篇文章《服务器搭建记录 · Zram的配置》作者:湙凇。未经许可严禁转载,转载与引用请首先注明作者(湙凇)、出处(https://blog.yisrime.xyz/02/02/%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%90%ad%e5%bb%ba%e8%ae%b0%e5%bd%95-zram%e7%9a%84%e9%85%8d%e7%bd%ae.html)以及此段内容。
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇

版权所有 严禁复制