最近网站更换服务器,由原来的windows服务器换成centos服务器,配置好后运行半天发现网站突然404报错,远程service mysqld restart后又可以正常运行,只是过一段时间就又不正常了。后来发现只要稍微流量大一点,就会出现莫名的的数据库连接错误的情况,然后连上服务器查看,发现mysql进程被结束了,经常出现这种情况,这还怎么得了,然后第一时间查看mysql日志发现是被进程结束了,好端端的怎么就自己结束了呢,这时候想到应该是mysql进程占用太多内存,然后被系统给kill 掉了。
然后 tail /var/log/messages 查看服务器的系统日志/var/log/messages。
然后看了下在mysql自动停止的时间段内,有什么异常的日志信息,日志有提示“Out of memory”这就可以判定,是服务器的内存使用不足,导致系统自动杀死的mysql的进程,果然是内存不足,通过升级服务器的内存可以解决。还有就是linux开启swap(虚拟内存) 也能相应的解决问题, 所以我选择了后者试一试。
在CentOS中添加Swap交换文件,防止内存不足时MYSQL崩溃
添加交换空间有两种选择:添加一个交换分区或添加一个交换文件。推荐你添加一个交换分区;不过,若你没有多少空闲空间可用, 则添加交换文件。
准备工作:
在设置 Swap 文件之前,有必要先检查一下系统里有没有既存的 Swap 文件。
运行以下命令:
swapon -s
如果返回的信息概要是空的,则表示 Swap 文件不存在。
检查文件系统
在设置 Swap 文件之前,同样有必要检查一下文件系统,看看是否有足够的硬盘空间来设置 Swap 。
运行以下命令:
df -hal
检查返回的信息,还剩余足够的硬盘空间即可。
具体步骤如下:
由于开启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分区
比如我的:dd if=/dev/zero of=/home/swap bs=1024 count=1024000
2、设置交换分区文件
mkswap /home/swap
3、立即启用交换分区文件
swapon /home/swap
如果在/etc/rc.local中有swapoff -a 需要修改为swapon -a
4、设置开机时自启用swap分区
需要修改文件/etc/fstab中的swap行。
添加 /home/swap swap swap defaults 0 0
注:/home/swap 路径可以修改,可以根据创建的swap文件具体路径来配置。
设置后可以执行free -m命令查看效果。
删除swap交换文件
1、先停止swap分区
/sbin/swapoff /home/swap
2、删除swap分区文件
rm -rf /home/swap
3、删除自动挂载配置命令
vi /etc/fstab
这行删除
/home/swap swap swap default 0 0
这样就能把手动增加的交换文件删除了。
注意:
1、增加删除swap的操作只能使用root用户来操作。
2、装系统时分配的swap分区貌似删除不了。
3、swap分区一般为内存的2倍,但最大不超过2G
另外需要补充的是,如果服务器运行的网站较多,占用内存实在太多的话,显然增加swap分区也并不能很好的解决问题,经过测试,刚开始增加swap分区时的确解决了问题,只是运行一段较长的时间后,问题又会重复出现,目前还没有找到更加理想的解决办法。
如果,如果你是宝塔的面板:那就更简单啦
- 最新
- 最热
只看作者