博客增加了50X监控重启的脚本之后,总算对502和504的错误有了一定的控制,但是今天又有朋友反应出现了“数据库连接错误”的信息,通过排查kern.log,发现如下的信息,
Jan 8 02:01:05 VMVPS kernel: [232387.072765] Out of memory: Kill process 1896 (mysqld) score 265 or sacrifice child
Jan 8 02:01:05 VMVPS kernel: [232387.093931] Killed process 1896 (mysqld) total-vm:966156kB, anon-rss:134124kB, file-rss:0kB
显然,是因为内存不够用,于是Linux杀掉了MySQL的进程。当然重启一下自然也就解决了,但是“治标不治本”。
微魔想了一下,决定一个“下策”,希望能够对阿里云这512M的配置能够有点儿帮助。为什么称之为“下策”呢?主要是因为从读取速度上来讲:物理内存>Swap分区>Swap文件;可见本文的创建Swap文件的方式算是下下之策,但是好处也是显而易见的,不需要额外的进行分区操作。
顺便吐槽一下阿里云这512M套餐的配置,内存上真心的不够用,希望大家入手时多多谨慎吧,其实内存也不贵…
为VPS增加Swap文件(可用于阿里云)
1.创建Swap文件(两种方法,推荐前者,因为用DD创建的话会很慢!)
fallocate -l 1024M /swapfile
或者
dd if=/dev/zero of=/swapfile bs=1M count=1024
2.设置Swap权限
chmod 600 /swapfile
3.格式化文件为Swap
mkswap /swapfile
4.激活Swap文件
swapon /swapfile
5.编辑/etc/fstab文件,让系统重启后自动挂载swap文件
/swapfile none swap defaults 0 0
可以用free -m测试一下
创建swap前
total used free shared buffers cached
Mem: 494 488 6 21 51 208
-/+ buffers/cache: 227 267
Swap: 0 0 0
创建swap后
total used free shared buffers cached
Mem: 494 483 11 21 68 96
-/+ buffers/cache: 318 176
Swap: 1023 0 1023
删除Swap文件
1.关闭Swap
swapoff -a
2.删除Swap文件
rm -f /swapfile
这个方法有没有用微魔还处于围观的状态,目测了很久swap都没有占用,具体效果日后和大家分享吧~
2015年1月9日更新
增加Swap的使用级别
经过楼下网友的热心提示
1.查看当前系统使用Swap的使用级别(0-100),0代表只有在万不得已时才会使用swap,而100则会经常使用swap
cat /proc/sys/vm/swappiness
微魔返回的数值是0,也是为什么上面说swap没有使用的原因
2.设置swap使用级别(为10为例)
sysctl vm.swappiness=10
3.设置开机自动设置
修改/etc/sysctl.conf文件
vm.swappiness=10