通过Zram和Swap无成本的拯救Debian服务器内存不够用的问题

Zram

Zram通过压缩(压缩会占用cpu资源)内存来扩大内存可用量
相比于swap和zswap,zram不需要读写磁盘,它直接将压缩后的数据放在内存中,因此速度相比swap会快很多。

  1. 安装zram-tools工具包:
sudo apt update
sudo apt install zram-tools
  1. 编辑配置文件
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
  • PRIORITY
    • 优先级,数值越大优先级越高
    • 注意:该值应该大于硬盘swap的优先级,否则zram不生效
  1. 使配置文件生效
service zramswap reload
  1. 查看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,会造成寿命下降

  1. 创建一个新的交换文件
    这里创建一个16GB 交换文件/swapfile
fallocate -l 16G /swapfile
  1. 设置交换文件的权限
    为了安全起见,需要设置正确的权限,使得只有 root 用户能够访问这个文件:
chmod 600 /swapfile
  1. 将文件格式化为交换空间
sudo mkswap /swapfile
  1. 启用交换文件
    启用刚才创建的交换文件:
swapon /swapfile
  1. 使交换文件在系统重启后自动挂载
    要在每次启动时都能自动挂载这个交换文件,需要将其添加到 /etc/fstab 文件中。打开该文件:
nano /etc/fstab

在文件末尾添加以下行:

/swapfile none swap sw 0 0

swap

  1. 验证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

愿这盛世 每一天