需求
本人服务器买的是最便宜的 1核2G 服务器,最近在学新技术时,发现服务器经常死机,很纳闷 后来才注意到时内存问题,几个程序跑起来 2G 内存基本上拉满,这时候再启动其他程序时,就会导致服务器死机 但是又没钱买新服务器,也没钱升级,咋办呢 穷砸的我终于注意到 free 下边的 swap,一番查询后反复尝试后,终于掌握了 swap 的使用方法
首先看一下在没使用 swap 之前的内存状态: 空闲分区仅剩 78M,可供程序使用的仅剩 55M 这时候只需要再跑一个小小的程序,服务器立马就会死机(已经重启很多次啦)
正式使用 Swap
在此之前先简单了解以下 Swap: 在 Linux 系统中,SWAP(交换分区)类似于 Windows 系统的虚拟内存 系统会把一部分硬盘空间虚拟成内存使用,将系统内非活动内存换页到SWAP,以提高系统可用内存
所以我们要做的就是:在磁盘中指定一个文件,让系统将其当成虚拟内存使用 ① 首先就是创建一块空间:
dd if=/dev/zero of=<文件路径> bs=<块的大小> count=<块的数量>
这里的文件路径可以任意,块的大小一般设置为 1M 也是任意,块的数量用于确认 swap 交换分区的大小
示例如下:指定了一块 512M 的交换分区(不过官方建议是:交换分区为物理内存的 1.5 倍较为合适,这里仅作演示)
dd if=/dev/zero of=/mnt/ice.swap bs=1M count=512
② 然后是将文件设置为交换分区文件,并启动
设置: mkswap /mnt/ice.swap
启动: swapon /mnt/ice.swap
③ 检查配置文件
如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a
可以使用 cat /etc/rc.local 进行确认
④ 设置开机时自启动 Swap 分区
vim /etc/fstab
在最后面添加:
/mnt/ice.swap swap swap defaults 0 0
⑥ 设置 swappiness
该参数值用来确定系统对 Swap 分区的使用规则 当 swappiness 为 0 时,表示最大限度地使用物理内存,即在物理内存全部使用完之后,再使用 Swap 分区 当 swappiness 为 0-100 时,如为 20,则表示当物理内存剩下 20% 时,就使用 Swap 当 swappiness 为 100 时,表示积极使用 Swap 分区,系统会将内存中的数据及时置换到 Swap 分区
1) 临时设置(以 100 为例)
echo 100 >/proc/sys/vm/swappiness
2) 永久设置(以 100 为例)
vim /etc/sysctl.conf
并在最后添加:vm.swappiness = 100
⑦ 效果查收 设置完毕后,在最开始第一张图的基础上,再启动一个程序,下边是效果图: 可以看到,Swap 分区用起来了!!! 服务器并没有崩掉,而是好好地跑着,空闲空间也维持在一个可以接受的值
虽说使用磁盘空间作为内存会影响程序运行的效率,但至少比服务器直接死机好太多了
⑧ 关闭分区
如果觉得内存又足够了不需要分区,可以将 swappiness 调低,又或者将该分区关闭,如下
1) 关闭分区
swapoff <swap文件路径>
2) 取消自动挂载
vim /etc/fstab
将我们添加的自启动去掉
3) free -m 确认分区已关闭
4) 设置 swappiness 参数
echo 0 >/proc/sys/vm/swappiness(临时)
vim /etc/sysctl.conf
将我们设置的参数去掉(永久)
5) 最后删除不需要的分区文件
rm -rf /mnt/ice.swap
⑨ 扩展分区
如果在使用的过程中,发现分区不够用了,可以对分区进行拓展 这也很简单,就是直接按步骤新建一个分区,启动就可以用了,下边是扩展了 1G 分区的状况: 可以看到分区变成了 1.5G(间接相当于我们有 3.5G 内存啦) 然后由于设置的 swappiness 参数是 100,所以系统很积极地使用这片分区(available 可供程序使用的腾出了三百多M)
汪洋不惧一泻,一泻可成汪洋(IceClean)
|