mysql 内存太大被杀_数据库mysqld进程频繁被杀解决方案[终]

重要:本文最后更新于2018-11-25 23:33:42,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗。

上次数据库mysql进程总是被杀,以前眼光不够长远,认为mysql被杀就是mysql的问题,直到上次修改了mysql的配置,将其降低至40M的内存配置后,发现了一个很大的问题,Apache进程httpd出现得太多,当时没有引以为戒,以为自己解决了mysql被杀的问题。这几天也一直在观察服务器,还挺开心,mysql没有被杀。但是就在刚刚,代码狗博客数据库mysql再次被系统无情的杀死。于是就有了这篇文章。

发现数据库被杀后,我立刻连接上服务器,查看了内存使用情况,果不其然,只剩下最后100M不到。mysqld进程已经不见了踪影,取而代之的是一大片httpd,每一个都占用了我2~3%的内存,足足近30个。立刻百度一番出现这种问题的原因,百度说是因为Apache的两种工作环境导致出现这种情况的。具体情况请查看这篇文章:Apache的prefork模式和worker模式

这两种模式各有各的优点,prefork模式下每个连接创建一个进程,单对单。worker模式下一个进程对应多个连接,使用线程来进行处理,多对单。

看来代码狗博客的服务器环境应该是处于prefork模式下了,终端输入命令

http -l

果不其然,回车后发现返回信息中出现prefork.c如下图所示。

dfb40e5119cb199f982f517ff81ff88a.png

找到服务器中Apache配置文件http-mpm.conf,该文件地址与你安装Apache的地址有关。修改标签下的内容如下图所示

79a8643b7ecc9bcc3396599c27717ad8.png

除了MaxRequestWorkers与MaxConnectionsPerChild参数外,我都减小了一倍。保存后重启Apache,输入命令(服务器配置不同,命令也不一样)

/etc/init.d/httpd restart

重启后使用top命令后按下shift+M键以内存大小排列,如下图

5a9858efcd463ffd1ac54b934c140f48.png

httpd进程数量明显减少,这不是重启后立即截的图。

使用free -m命令查看内存使用情况如下图,瞬间感觉几百大洋白花了,还剩下这么多内存,简直浪费啊!!!

b7bd041b887899b9a7893f98baec4a9a.png

总结:prefork模式建议在大内存服务器上使用,小内存worker模式更好,但速度上有所降低,(我是没体验出来)。至于为什么我不使用worker模式,那是因为我找了很久Apache模式切换的方法,始终失败,以后有机会再与大家分享模式切换的方法吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值