mod_pagespeed导致Apache服务器高CPU负载问题解决

01/08/2014

从没有IO瓶颈的OpenVZ切换到KVM之后各种问题就会体现为不正常的CPU负载,比如这次Kaijia在为Apache服务器添加了mod_pagespeed模块支持后就遇到了这个问题。在启用了mod_pagespeed以及其他几个模块后,Kaijia查看CPU负载的监控记录时发现启用mod_pagespeed模块前后的CPU负载差距异常大。

系统监控显示PageSpeed启用前后CPU负载对比

系统监控显示PageSpeed启用前后CPU负载对比

由于同时启用了多个新模块,所以Kaijia还不能确定到底是哪个模块的问题。Kaijia打开Apache的错误日志查看记录,结果无论使用vim还是nano都转了半天没有动静。一般这种情况都是由于IO造成的,于是Kaijia查看了一下error.log的大小,结果发现error.log居然有242MB(这。。。)。

显然文本编辑器直接打开日志要冒着内存耗尽的风险(KVM下SWAP速度慢得可以无视,这样操作完全会把服务器卡死),于是只能使用sed截取日志文件的中间部分再查看:

这次截取出来的内容中充斥着:

[error] [mod_pagespeed 1.6.29.7-3566 @18285] Failed to make directory /var/cache/mod_pagespeed/http,3A: Permission denied
[error] [mod_pagespeed 1.6.29.7-3566 @18285] Could not create directories for file /var/cache/mod_pagespeed/http,3A/……
[error] [mod_pagespeed 1.6.29.7-3566 @18285] /var/cache/mod_pagespeed/http,3A/……: opening temp file: No such file or directory

Kaijia查看了/var/cache/mod_pagespeed/目录的权限:

结果显示此目录为root用户所有,而Apache的用户名是www-data,因此mod_pagespeed无法向此目录写入内容而不停得向error.log写入错误日志造成IO使用率增加,最终造成了CPU的高负载。问题找到后只要运行:

将此目录的所有权改为www-data,然后重启Apache服务器问题就修复了。