通过Zram和Swap无成本的拯救Debian服务器内存不够用的问题
Zram
Zram通过压缩(压缩会占用cpu资源)内存来扩大内存可用量
相比于swap和zswap,zram不需要读写磁盘,它直接将压缩后的数据放在内存中,因此速度相比swap会快很多。
- 安装zram-tools工具包:
sudo apt update
sudo apt install zram-tools
- 编辑配置文件
nano /etc/default/zramswap
安装后会在/etc/default/zramswap
生成默认配置文件,可用配置项如下
# Compression algorithm selection
# speed: lz4 > zstd > lzo
# compression: zstd > lzo > lz4
# This is not inclusive of all that is available in latest kernels
# See /sys/block/zram0/comp_algorithm (when zram module is loaded) to see
# what is currently set and available for your kernel[1]
# [1] https://github.com/torvalds/linux/blob/master/Documentation/blockdev/zram.txt#L86
ALGO=zstd
# Specifies the amount of RAM that should be used for zram
# based on a percentage the total amount of available memory
# This takes precedence and overrides SIZE below
PERCENT=80
# Specifies a static amount of RAM that should be used for
# the ZRAM devices, this is in MiB
#SIZE=256
# Specifies the priority for the swap devices, see swapon(2)
# for more details. Higher number = higher priority
# This should probably be higher than hdd/ssd swaps.
PRIORITY=100
ALGO
- 压缩算法
- 算法对比:
- 速度:lz4 > zstd > lzo
- 压缩比率:zstd > lzo > lz4
PERCENT
- 指定多少比例的内存可被压缩
SIZE
- 指定多大内存可被zram压缩,单位
MiB
- 指定多大内存可被zram压缩,单位
PRIORITY
- 优先级,数值越大优先级越高
- 注意:该值应该大于硬盘swap的优先级,否则zram不生效
- 使配置文件生效
service zramswap reload
- 查看Zram状
zramctl
输出:
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 12.5G 4K 64B 4K 8 [SWAP]
NAME
- zram设备名称
ALGORITHM
- zram压缩算法
DISKSIZE
- 可压缩的总内存大小
DATA
- 已压缩的内存原始大小
COMPR
- 已压缩的内存压缩后大小
TOTAL
- zram设备当前占用总大小
- 包括压缩后的内存以及元数据
STREAMS
- 使用多少个线程进行压缩处理
MOUNTPOINT
- 挂载点
Swap
Swap通过磁盘存储来扩大内存可用量
Swap需要读写磁盘,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写swap,会造成寿命下降
- 创建一个新的交换文件
这里创建一个16GB 交换文件/swapfile
fallocate -l 16G /swapfile
- 设置交换文件的权限
为了安全起见,需要设置正确的权限,使得只有 root 用户能够访问这个文件:
chmod 600 /swapfile
- 将文件格式化为交换空间
sudo mkswap /swapfile
- 启用交换文件
启用刚才创建的交换文件:
swapon /swapfile
- 使交换文件在系统重启后自动挂载
要在每次启动时都能自动挂载这个交换文件,需要将其添加到/etc/fstab
文件中。打开该文件:
nano /etc/fstab
在文件末尾添加以下行:
/swapfile none swap sw 0 0
- 验证Swap
swapon --show
free -h
Swappiness 设置
Linux 使用一个名为 swappiness 的参数来决定何时使用交换空间。这个参数的值范围是 0 到 100:
- 值较低(如 10)会使系统更倾向于使用物理内存,而不是交换空间。
- 值较高(如 60 或更高)则表示系统会更频繁地使用交换空间。
可以通过以下命令查看当前的 swappiness 值:
cat /proc/sys/vm/swappiness
要临时更改 swappiness 值为60,可以使用以下命令:
sysctl vm.swappiness=60
要永久更改,请编辑 /etc/sysctl.conf
文件并添加或修改以下行:
vm.swappiness=60
然后应用更改:
sysctl -p