最近发现自己使用的某台云服务武器只要稍微流量大一点,就会出现莫名的的数据库连接错误的情况 ,然后连上服务器查看,发现mysql进程被结束了,经常出现这种情况,这还怎么得了,然后第一时间查看mysql日志 发现是被进程结束了,好端端的怎么就自己结束了呢,这时候想到应该是mysql进程占用太多内存,然后被系统给kill 掉了.
然后 tail /var/log/messages 查看服务器的系统日志/var/log/messages
然后看了下在mysql自动停止的时间段内,有什么异常的日志信息,日志有提示“Out of memory”这就可以判定,是服务器的内存使用不足,导致系统自动杀死的mysql的进程,果然是内存不足,通过升级服务器的内存可以解决。还有就是linux开启swap(虚拟内存) 也能相应的解决问题, 所以我选择了后者试一试。
具体步骤如下:
由于开启swap分区会导致硬盘IO性能下降,因此阿里云服务器或者其他的一些云服务器初始状态未配置swap,如果某些应用需要开启swap分区,可以采用如下方法增加:
1、创建用于交换分区的文件
#dd if=/dev/zero of=/mnt/swap bs=block_size count=number_of_block
注:block_size、number_of_block 大小可以自定义,比如bs=1M count=1024 代表设置1G大小swap分区
2、设置交换分区文件
#mkswap /mnt/swap
3、立即启用交换分区文件
#swapon /mnt/swap
如果在/etc/rc.local中有swapoff -a 需要修改为swapon -a
4、设置开机时自启用swap分区
需要修改文件/etc/fstab中的swap行。
添加 /mnt/swap swap swap defaults 0 0
注:/mnt/swap 路径可以修改,可以根据创建的swap文件具体路径来配置。
设置后可以执行free -m命令查看效果: