小叨下背景:笔者的服务器内存只有 1g,少得可怜。之前使用apache,不堪忍受其过量的内存消耗,网站卡得想哭,数据库也不断地崩,无奈投入 nginx 的怀抱并且已经喜欢上了 nginx。然而过了几个月后数据库还是继续崩,经查询mysql日志还是因为内存吃不消,折腾几番发现 mysql 自身就不是省油的灯,一度占用了 500M 的内存——我捂住嘴巴不让自己哭出来,还顺便来了段 Bbox。
这两天我那谁一直在折腾 RedHat 安装 Oracle 数据,该数据库有一项要求就是需要一定空间的swap 分区。虽然早有耳闻 swap 分区,而且笔者经常折腾 windows 下的虚拟内存(swap 和虚拟内存是类似概念),却很惭愧一直没想到这个办法,于是——进入今天的主题。
在添加 swap 分区之前我们可以了解下当前系统 swap 是否存在以及使用情况,可用:
- free -h 或 swapon -s
了解硬盘使用情况(一般/dev/vda1 为挂载硬盘):
- df -hal
1、创建(添加)swap分区
使用 dd 命令创建名为 swapfile 的 swap 交换文件(文件名和目录任意):
- dd if=/dev/zero of=/var/swapfile bs=1024 count=2097152
或
- dd if=/dev/zero of=/var/swapfile bs=1024 count=2048k
回车后,会执行 2g 的读写操作,系统会卡一段时间,耐心等待执行结果。执行完毕,对交换文件格式化并转换为 swap 分区:
- mkswap /var/swapfile
挂载并激活分区:
- swapon /var/swapfile
执行以上命令可能会出现:“不安全的权限 0644,建议使用 0600”类似提示,不要紧张,实际上已经激活了,可以忽略提示,也可以听从系统的建议修改下权限:
- chmod -R 0600 /var/swapfile
这时候可以用 free -h 或 swapon -s 命令查看新 swap 分区是否正常添加并激活使用。
修改 fstab 配置,设置开机自动挂载该分区:
- vim /etc/fstab
在 fstab 文件末尾追加如下内容后:wq!保存即可:
- /var/swapfile swap swap defaults 0 0
或直接对 fstab 进行 echo 追加:
- echo “/var/swapfile swap swap defaults 0 0” >> /etc/fstab
2、删除某 swap分区
先停止正在使用 swap 分区:
- swapoff /var/swapfile
删除 swap 分区文件
- rm -rf /var/swapfile
删除或注释掉我们之前在 fstab 文件里追加的开机自动挂载配置内容:
- /var/swapfile swap swap defaults 0 0
3、更改 Swap配置(进阶级)
swappiness 值(0-100),系统对 swap 分区的依赖程度,越高则越倾向于使用 swap 分区。当然,高度依赖 swap 会造成物理内存远未使用完,就使用 swap 分区,我们知道 swap 分区性能远不如物理内存,这反而降低了系统性能,违背了我们创建 swap 分区的初衷。我们希望在物理内存即将满荷时再使用 swap,这就决定了 swappiness 值一般为 10-60 为宜,固态硬盘可以偏高些。
查看当前的 swappiness 数值:
- cat /proc/sys/vm/swappiness
修改 swappiness 值,这里以 50 为例。
- sysctl vm.swappiness=50
若希望 vm.swappiness=50 永久生效,则需要修改 sysctl 配置文件,直接 echo 追加配置内容,重启系统后即可生效:
- echo “vm.swappiness = 50” >> /etc/sysctl.conf