Linux系统之扩展交换分区的两种方式
适用系统(手动修改swap文件):Deepin、Ubuntu、CentOS 调试系统: Deepin 15.5
- 这里所说的交换分区与交换空间是同一个概念,本篇文章主要讲解如何手动与软件管理的方式,通过添加swap文件来扩展现有的交换分区。
- 交换分区是什么呢?其实就是类似windows的虚拟内存,在内存不够的时候,用磁盘临时保存部分内存。常常有人说用chrome或者java程序,内存不够,系统卡死。其实系统卡死很大原因就是因为磁盘IO卡死的原因,这里面内存交换就会导致大量磁盘IO,或者内存频繁交换也导致的程序卡死。内核里有两个功能模块zswap和zram具有很好的增强交换分区的功能。开启之后,电脑就不卡了,chrome开20+网页也不是梦了,什么IDE,java程序随心跑(学着大牛们也吹的夸张些)
手动添加Swap文件
安装完Linux再划分交换分区是可以的,有两种方式:一种是当硬盘上还有未分配空间时,在未分配空间划分出交换分区;还有一种方式是建立一个swap文件作为交换空间,这种方式是最简便的,因为Linux系统上可以同时有多个swap(可以用swapon -s命令可以看到系统上所有的swap,用free命令看到的是swap总共的大小),所以swap不够用时可以再用文件的方式再建立一个swap。
接下来以10G大小的文件为例介绍如何用文件建立内存交换空间:
查看当前系统中所有的swap分区
打开终端输入以下命令:
swapon -s
或者swapon -f
当前系统在安装时已经划分了8G的交换分区,所以默认会有一个7.6G的交换空间
未新增交换空间时的效果如下:
1. 使用dd命令在某个目录下新建一个10G的文件
dd if=/dev/zero of=/tmp/swap bs=1M count=10240
命令解释:1M 是单位, 10240是数量,合计10240M即10G
为了演示在/tmp下创建的swap文件,重启后会丢失,实际使用时建议换成其他目录。
2. 格式化这个文件为swap格式
mkswap /tmp/swap
3. 启动swap,用swapon命令将新建的swap添加到系统
sudo swapon /tmp/swap
使用sudo命令运行
4. 查看效果
swapon -s
5. 删除swap交换空间
swapoff /tmp/swap
Swap管理软件
使用方法
- 通常想要调整交换文件的大小可以直接通过交换文件页面里的那个拉拽条或自己输入 就好了。
- 调整好自己想要的配置,然后点击保存。
- 之后点击上面重启swap服务,就可以看到显示效果了。 想看交换分区的效果,打开系统监视器,就可以看到下面的交换分区的信息了。一定要记得,任何修改都要保存之后,点击重启swap服务才能生效
第一次安装
注意第一次安装,打开软件之后,请选择开机启动服务。然后点击重启swap服务,这样就不需要重启就可以启动管理服务了。
下载
64位:swap-control-64.tar.gz 32位:swap-control-32.tar.gz
安装:解压双击deb就可以安装
注意:64位系统千万不要安装32位的,不然后果自负啊。github有打包安装的说明,可以自己尝试打包。
功能介绍【之如果你只要调整交换文件大小看不看无所谓系列】
zswap
在windows下是不是见过一个叫内存压缩的进程。相对应的这是一个linux下实现的内存压缩技术,实现在ram中压缩内存来缓解内存不足,也避免了内存swap的io消耗。zswap其实是对交换分区的一个缓冲功能,就是不常用的内存页在内存紧张的时候会被交换到交换空间,但是这个技术就是在内存里开一个压缩区,本来要被交换出去的内存先放到压缩区缓存一下(说不定这内存页说不定又会马上被用到),当压缩区要满了,就把压缩区的东西真正交换出去腾空间。这个功能模块启动时已经被默认加载到内核里了。文档:zswap
- 压缩池比例:就是你的压缩池的大小,默认是你内存的20%,最好也就在这左右吧
- 存储池类型:通俗些就是存储池的格式
- 压缩算法:就是选用的压缩算法
Zram
Zram其实是从内存创建一个独立的块设备的功能。通俗点zram是在内存里开了一块区域当硬盘来用,所以也可以拿来当swap分区咯。当然也有压缩的功能。但是这个模块还没有普遍被大家接受,系统也没有默认加载这个模块,但是点击启用该功能后后,会自己加载这个内核模块。 文档:zram
- Zram大小:我设定不超过内存的一半了
- Zram Streams:压缩时候使用几个CPU核心,默认是使用一个核心。
- Zram算法:压缩算法
交换文件
就是普通的交换文件的功能,来取代交换分区的功能。
- 交换文件大小:自己随心调整就好。
-
动态交换文件:其实就是动态调整swap文件的大小。实现的方式是内存不够了,申请一块swap文件用用,又不够了,再申请一块用用。内存空出来了,那就释放删掉swap文件,就是比上面多了个动态申请释放的效果。
- 交换块大小:每个swap文件块的大小
- 最大块数:就是最多多少个swap文件块,所以动态交换文件最高承受能力是 交换块大小×最大块数
- 触发比例:swap剩下多少空间的时候,触发申请新的swap块。
- 启用交换分区:这个没用,还没作。
注意这里的交换文件大小(就是固定大小的交换文件)和下面的动态交换文件是可以并存的。 还有交换分区的控制还没作。默认是加载所有的swap设备。但是swap分区的优先级被默认调到了最低。
常见问题
问:zswap和zram能不能共存啊?都开好,还是只开一个好啊? 答:zswap和zram是两个不同的东西,一个是替交换空间做缓存,一个是用内存建交换空间,所以是可以共存的。按道理来说用一个就足够了,推荐开是zswap。
问:交换文件支不支持btfs啊? 答:交换文件不支持btfs(个人不用,也不会去测试),当然不知道btfs的就不用管了。
问:交换分区和交换文件什么区别啊? 答:个人觉得没有什么大区别,交换文件依赖于文件系统中,不能被多个系统共有。但是交换文件可以容易调整大小。
Github
https://github.com/MeowSprite/swap-control-gui
https://github.com/Nefelim4ag/systemd-swap