前言
最近翻新了下自己的博客,部署了些 docker 应用,结果小鸡内存蹭蹭往上涨,2G 内存眨眼就没了一大半。贫穷的我真不想掏钱加配置,只能添加虚拟内存来缓缓了。
什么是 Swap
Swap 说白了就是把一块磁盘空间当成内存来使用。它包括换出和换入两个过程。
所谓换出,就是把进程暂时不用的内存数据存储到磁盘中,并释放这些数据占用的内存。而换入,则是在进程再次访问这些内存的时候,把它们从磁盘读到内存中来。
一个很典型的场景就是,即使内存不足时,有些应用程序也并不想被 OOM 杀死,而是希望能缓一段时间,等待人工介入,或者等系统自动释放其他进程的内存,再分配给它。
除此之外,我们常见的笔记本电脑的休眠和快速开机的功能,也基于 Swap 。休眠时,把系统的内存存入磁盘,这样等到再次开机时,只要从磁盘中加载内存就可以。这样就省去了很多应用程序的初始化过程,加快了开机速度。
缺点就是,swap 是存放在磁盘上的,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写 swap,那么对系统的性能肯定有影响,尤其是当系统内存很吃紧的时候,读写 swap 空间发生的频率会很高,导致系统运行很慢,像死了一样,这个时候添加物理内存是唯一的解决办法。
详细操作
定义 Swap的大小及位置
选择你 Swap 文件要放置的位置,比如我直接在根目录/下创建,然后设置 swap 分区的名称为 swapfile。
1 | cd / |
上面 swapfile 为你创建 Swap 文件分区的名称,你可以根据需要改成你自己的名称;bs 即 blocksizes,每个块大小为 1k;count=2048000,总大小为 2G 的文件。
建立 Swap
1 | mkswap /swapfile |
启动 Swap
1 | swapon /swapfile |
检查是否正确
1 | free -m |
设置开机自启
修改 /etc/fstab 使其启动时自动 mount,这个操作与 Swap 分区法一样,在 /etc/fstab 中最后一行增加如下语句:
1 | /swapfile swap swap defaults 0 0 |
删除 Swap分区
如果不再需要swap,可以清理该分区:
1 | swapoff /swapfile |