WordPress和Apache崩溃MySql(CLOSE_WAIT)

最后一天,我的vps上的mysql服务器开始崩溃,有时在重新启动后。 我在wordpress网站发现了这个问题。 service mysql start许多apache2进程超载内存和CPU。 这是顶部的截图。

在这里输入图像说明

我没有发现从Apache日志有用,mysql错误日志显示关于内存不足的消息:

 140922 12:24:43 [Note] Plugin 'FEDERATED' is disabled. 140922 12:24:43 InnoDB: The InnoDB memory heap is disabled 140922 12:24:43 InnoDB: Mutexes and rw_locks use GCC atomic builtins 140922 12:24:43 InnoDB: Compressed tables use zlib 1.2.8 140922 12:24:43 InnoDB: Using Linux native AIO 140922 12:24:43 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 140922 12:24:43 InnoDB: Completed initialization of buffer pool 140922 12:24:43 InnoDB: Fatal error: cannot allocate memory for the buffer pool 140922 12:24:43 [ERROR] Plugin 'InnoDB' init function returned error. 140922 12:24:43 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 140922 12:24:43 [ERROR] Unknown/unsupported storage engine: InnoDB 140922 12:24:43 [ERROR] Aborting 140922 12:24:43 [Note] /usr/sbin/mysqld: Shutdown complete 

首先,我想也许问题在数据库和检查数据库与mysqlcheck --all-databases所有mysqlcheck --all-databasesmysqlcheck --all-databases ,我试图下降,并创build新的数据库,没有运气。

另外我试图删除WordPress的插件文件夹。 WordPress的最后的版本,评论禁用,3用户,less量的访客(企业博客)。

现在我不知道在哪里看,如何诊断问题,如果在Apache中启用了wordpressconfiguration,mysql的寿命不会超过10-20秒。

更新:我被删除WP文件夹和下载新的WP没有任何configuration。 如果wp站点启用,vps开始重载,apache不能回答请求。 没有WP启用所有作品平稳。 我并没有破坏这个液滴,因为我想find问题的原因。 也许这是VPS的一些利用?

更新2:search日志和netstat后,我发现这个问题出现在:

  1. WordPress的网站已启用和Apache与MySQL的作品
  2. 一些请求从虚拟机器人rpc.php或类似的东西在CLOSE_WAIT设置apache连接,经过几次请求apache有很多工人在CLOSE_WAIT条件,结果许多工人和内存运气(是的,我应该减less最大值,但无论如何,网站停止工作当所有的工人等待)
  3. MySQL与内存的幸运下降(这不是问题的build议,在回答这是另一个问题的后果,升级VM不解决问题)
  4. 在mysql下载超载停止后。 (这导致我认为也许数据库已损坏,但检查数据库后,没有发现错误)

什么原因可能在缺less文件的虚拟请求之后以CLOSE_WAIT状态进入apache?

看起来你只是用尽了内存,因为错误build议cannot allocate memory for the buffer pool

您的select是:

  • 升级(虚拟)硬件,使其具有更多内存
  • 和/或获得更多的交换
  • 减less其他应用程序的内存使用量,即apache。

你的阿帕奇正在消耗你的系统所能承受的所有内存。 你的mysql没有空间了。 你会想调整你的Apache设置,以便消耗更less的内存。 最大的影响应该来自减less你的Apache设置的最大孩子标准。 以你最大的apache实例为例,看来你最多只能负担14个孩子,而系统会因为缺less大小为34MB的ram而崩溃。

如果你的每个apache预计会占用30MB,而你有128MB的数据库和128MB的操作系统,那么我们可以做非常简单的math计算。 512(总) – 128(db) – 128(os)将为apache留下256。 每个30MB意味着你只能买得起8个apache儿童。 尽pipe还有更多,我们至less可以看到你的顶级截图中的22个孩子。

512MB是less量运行一个网站,你将需要做很多调整,以优化你的小内存。 另外,像InnoDB这样的引擎可能不是一个很好的解决scheme,它对RAM有很高的依赖性。 像myisam的另一个引擎可能更适合您的需求。