剖析WordPress内存使用情况的理想方法是什么?


8

我们正在两台Rackspace Cloud服务器,一台Web和一个数据库上运行一个WordPress多站点实例,目前有30个左右的站点。我将Nginx放在静态资产的前面,而Apache处理所有动态请求。我还为数据库配置了Memcached,为PHP配置了APC操作代码缓存。默认情况下,我们拥有的所有站点都启用W3 Total Cache。

很快就解决了一个问题:Apache进程通常在80到120 MB之间。Web服务器有2 GB的内存,这意味着我需要15个左右的进程,直到一切变得混乱为止。流程显然不应该那么大,但是我对为什么如此感到困惑。

识别正在发生的事情的好策略是什么?

提前致谢!

更新10/2/10:对于那些想知道的人,内存问题的解决方案是禁用PHP xdebug(在配置中无意中启用了该功能,并导致随机内存使用量激增)。

Answers:


4

您谈论的apache进程内存量(每个进程80到120 MB)可以分为两个原因。

  1. 阿帕奇
  2. WordPress的

阿帕奇

您可以通过仅加载所需的模块数量和其他可减少内存的优化调整来优化apache。如果尚未进行优化,请对其进行一些调整。

WordPress的

WordPress仅消耗大量内存,并且根本没有进行优化。我将从用更正确实现的东西替换数据库类开始。这样可以提高速度,并大量减少内存使用。除此之外,我没有太多建议。我猜不使用Worpdress并不被认为是有帮助的。

策略

要了解发生了什么,您需要跟踪一个wordpress请求占用了多少内存。有一个获取峰值使用情况函数(memory_get_peak_usage())可用于监视worpdress内存使用情况。如果它接近您所写的80-120 MB,您就会知道WordPress令人头疼。您可能想要记录时间戳,峰值内存,执行时间和请求的URI。

使用Nginx为缓存的wordpress页面提供服务无疑会为您带来帮助,因为它可以防止wordpress加载-甚至对于您使用的那些“入站”缓存也是如此。从概念上讲,它们是损坏的,因为它们是wordpress插件,因此即使是缓存的结果,也至少需要加载wordpress的一部分。


1

丹尼尔

我恭敬地不同意kenkeiter,我知道使用nginx作为Apache前面的反向代理。哈佛大学法学院在这种方法上取得了巨大的成功,他们撰写了一篇很好的文章,介绍了如何做到这一点,并提供了其WordPress插件的链接,该插件可帮助与nginx交互:

http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/

他们在哈佛大学法学院发现的是,由于nginx基本上在前端缓存所有请求,因此在后端使用任何其他缓存类型的插件实际上并没有提高性能,因此不值得增加额外的复杂性。如果您真的想以这种方式使用nginx,建议您看一下有关其经验的文章,并尝试减少动态过程,包括WP端缓存。

一些基本的探索,例如仔细查看您的Apache访问和错误日​​志,以查看实际上必须动态执行哪些类型的查询,并尝试减少此类情况,也可能是一个不错的开始。


0

好吧,首先,您正在使用Apache和Nginx-有点多余。您应该使用带有PHP的Nginx / FastCGI。该站点上的教程应有所帮助。否则,我的最佳猜测是您的代码最近进行了一些更改,导致PHP中的某些错误无法正确释放内存。没有理由说Apache进程应该消耗那么多内存。

http://interfacelab.com/nginx-php-fpm-apc-awesome/

祝好运!

@kenkeiter


Nginx / FastCGI很棒,但是超出了解决这个问题的范围
Daniel Bachhuber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.