Linux设置虚拟内存

mkdir VM #创建文件夹

cd VM

dd if=/dev/zero of=/disk/VM/swap bs=1M count=16384 #创建大小为16G的swap文件

du -sh /disk/VM/swap #查看文件

mkswap /disk/VM/swap #设置swapfile为分区文件

chmod 600 /disk/VM/swap #设置虚拟内存权限等级

swapon[swapoff] /disk/VM/swap #启动交换区文件

/etc/fstab -> /disk/VM/swap none swap sw 0 0

关闭swapoff swap 注释/etc/fstab 删除文件rm swap

调优

# 临时设置(优先使用物理内存,尽量不换出)
sysctl vm.swappiness=10

# 永久生效
echo 'vm.swappiness=10' >> /etc/sysctl.conf

解释

字段含义
1/disk/VM/swap设备路径:swap 文件的位置
2none挂载点:swap 不需要目录挂载点,用 none 占位
3swap文件系统类型:表明这是交换分区/文件
4sw挂载选项sw = 启用 swap 读写权限
50dump 备份:0 = 不备份(swap 不需要备份)
60fsck 检查:0 = 开机不检查(swap 不需要文件系统检查)

systemctl 管理程序可以使用 MemorySwapMax=0(*.service) 禁止程序转入swap

高级调优

使用ZRAM

# 1. 安装 ZRAM 配置工具
sudo apt-get update
sudo apt-get install zram-config

# 2. 启用并启动服务(立即生效)
sudo systemctl enable zram-config
sudo systemctl start zram-config

# 3. 验证
zramctl && free -h | grep Swap

验证输出

# zramctl 应显示设备
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle      32G   4K   74B   12K       8 [SWAP]

# free -h 应显示 Swap 不为 0
Swap:         32G      0B     32G

调整大小

# 停用当前 ZRAM
sudo swapoff /dev/zram0
sudo systemctl stop zram-config

# 编辑配置(Ubuntu 22.04+)
sudo nano /etc/default/zramswap
# 修改:
# ALGO=lz4
# DISKSIZE=16G   # 改为 16G

# 重启服务
sudo systemctl start zram-config

故障排查

# 理想状态(机械盘 Swap 已关,ZRAM 已启用)
free -h
              total        used        free      shared  buff/cache   available
Mem:           64G         12G         45G        512M        6.8G         51G
Swap:          32G           0B         32G     ←  ZRAM

# 检查 fstab(确认机械盘 Swap 已注释)
cat /etc/fstab | grep -i swap
# 应无任何输出,或看到 #/swapfile 被注释