Linux下通过swap或zram管理内存
参考网址:
1.Ubuntu开启zram和zswap~
2.使用zram进行内存压缩
3.Ubuntu添加swap分区
创建Swap分区
Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
Swap分区虽然可以达到扩大内存的作用,但缺点依旧很明显,相比直接使用物理内存,Swap必然速度上会出现一定的取舍。
新建一个文件夹来作为swap的文件
1
2
3mkdir swap
cd swap
sudo dd if=/dev/zero of=sfile bs=1024 count=2000000其中
sfile
是文件的名字,可以自己设置,count=2000000
是Swap分区的大小,这里指2G转化为swap文件
sudo mkswap sfile
激活swap文件
sudo swapon sfile
查看效果
free -m
1
2
3total used free shared buff/cache available
Mem: 478 61 184 3 233 379
Swap: 2704 0 2704已经成功挂载了
添加开机加载
1
vi /etc/fstab
修改配置文件,添加Swap文件(Swap文件的路径为
/root/swap/sfile
)/root/swap/sfile none swap sw 0 0
类似如下
1
2
3
4/dev/vda1 / ext4 defaults 1 1
/dev/vda2 swap swap defaults 0 0
/root/swap/sfile none swap sw 0 0
none /dev/shm tmpfs defaults 0 0
使用zram进行内存压缩
swap空间在机械硬盘的设备上往往不一定是个好选择,这个时候牺牲一定的CPU性能来使用zram则会比较好
zram 是在 Linux Kernel 3.2 加入的一个模块,其功能是在内存中开辟一块空间,用来存储压缩后的内存数据,这样可以在牺牲一定的 CPU Cycle 的情况下,在内存中存储尽量多的数据而不需要写入到磁盘。
安装zram-config,并重启系统
1
2sudo apt install zram-config
sudo reboot通过zramctl查看zram的情况(默认情况下ALGORITHM为lzo)
1
2NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 239.4M 4K 63B 4K 1 [SWAP]注意到这里的压缩算法,有两种算法 lzo 和 lz4 可选,默认是 lzo。根据 Benchmark,lz4 的压缩和解压性能在压缩率和 lzo 持平的情况下显著高于后者,因此我们应该采用 lz4 而非 lzo 以获得更高的系统效率。
修改配置文件来使用lz4算法
usr/bin/init-zram-swapping
将源文件的以下部分
1
2
3
4
5
6
7## initialize the devices
for i in $(seq ${NRDEVICES}); do
DEVNUMBER=$((i - 1))
echo $mem > /sys/block/zram${DEVNUMBER}/disksize
mkswap /dev/zram${DEVNUMBER}
swapon -p 5 /dev/zram${DEVNUMBER}
done替换为
1
2
3
4
5
6
7
8## initialize the devices
for i in $(seq ${NRDEVICES}); do
DEVNUMBER=$((i - 1))
echo lz4 > /sys/block/zram${DEVNUMBER}/comp_algorithm
echo $mem > /sys/block/zram${DEVNUMBER}/disksize
mkswap /dev/zram${DEVNUMBER}
swapon -p 5 /dev/zram${DEVNUMBER}
done载入新的配置
systemctl restart zram-config
开启ZSwap
编辑grub文件
sudo vi /etc/default/grub
在文件末尾加上
1
GRUB_CMDLINE_LINUX=”zswap.enabled=1″
保存退出
在终端输入命令
sudo update-grub
重启系统
zswap是一种新的轻量化后端构架,将进程中正交换出的页面压缩,并存储在一个基于RAM的内存缓冲池中。除一些为低内存环境预留的一小部分外,zswap缓冲池不预先分配,按需增加,最大尺寸可用户自定义。
Zswap启动存在于主线程中的一个前端,称为frontswap,zswap/frontswap进程在页面真正交换出之前监听正常交换路径,所以现有的交换页面选择机理不变。
Zswap也引入重要功能,当zswap缓冲池满时自动驱除页面从zswap缓冲池到swap设备。防止陈旧页面填满缓冲池。