我应该使用哪个PHP操作码缓存来提高性能?
我正在尝试在高负载下提高性能,并希望实现操作码缓存。我应该使用以下哪项?
- APC-安装指南
- eAccelerator-安装指南
- XCache-安装指南
我也愿意接受其他任何在我的监视下溜走的选择。
当前在运行有Apache 2和PHP 5.2的普通Debian Etch上运行
[更新1]
新增了HowtoForge安装链接
[更新2]
根据给出的答案和反馈,我已经在我的应用程序上使用以下Apache JMeter测试计划测试了所有3种实现:
- 登录
- 访问主页
使用50个并发连接,结果如下:
没有操作码缓存
装甲运兵车
电子加速器
X缓存
性能图(越小越好)
根据以上结果,与APC和XCache相比,eAccelerator的性能略有下降。但是,从以上数据中最重要的是,任何类型的操作码缓存都会极大地提高性能。
由于以下两个原因,我决定使用APC:
- 软件包在Debian官方仓库中可用
- 功能更多的控制面板
总结一下我的经验:
易于安装:APC> eAccelerator> XCache
性能:eAccelerator> APC,XCache
控制面板:APC> XCache> eAccelerator
解决方案
回答
我不能肯定地说,但是我现在工作的地方是APC和eAccelerator。但是,这可能会影响我们,将APC集成到PHP的未来版本中(感谢Ed Haber的链接)。
回答
我在eAccelerator上取得了不错的成绩(无负载的速度提升非常明显),但是XCache似乎也很有前途。我们可能希望对每个应用程序进行一些试验,但应用程序在每个应用程序上的扩展规模可能会有所不同。
回答
我认为答案可能取决于我们正在运行的Web应用程序的类型。我必须在两年前自己做出决定,无法在Zend Optimizer和eAccelerator之间做出决定。
为了做出决定,我使用了ab(apache bench)来测试服务器,并测试了三种组合(zend,eaccelerator,两者都在运行),并证明了eAccelerator本身可以提供最佳性能。
如果时间充裕,我建议我们自己进行类似的测试,然后根据结果做出决定。
回答
我已经使用XCache一年多了,没有任何问题。
我尝试切换到eAccelerator,但最终遇到了许多分段错误(错误的容忍度较低)。 eAccelerator的主要好处是它不仅是一个操作码缓存,而且还是一个优化器。
我们应该对每个应用程序进行全面测试,以确保没有任何问题,然后使用apachebench在负载下对其进行测试。
回答
我使用APC是因为它很容易在Windows中安装,并且我正在WAMP上进行开发。
这里讨论了如何将APC集成到PHP6中:
http://www.php.net/~derick/meeting-notes.html#add-an-opcode-cache-to-the-distribution-apc
这里有在Debian Etch上安装APC的说明:
http://www.howtoforge.com/apc-php5-apache2-debian-etch
回答
我已经使用eAcclerator,APC,XCache和Zend Optimizer运行了多个基准测试(即使Zend是一个优化程序,而不是缓存)。
基准测试结果http://blogs.interdose.com/dominik/wp-content/uploads/2008/04/opcode_wordpress.png
结果:eAccelerator最快(在所有测试中),其次是XCache和APC。 (图中的数字是10,000次调用WordPress主页的秒数)。
Zend Optimizer使一切变慢(!)。
回答
从历史上看,这些加载项引入了许多怪异的bug来进行跟踪。这些错误可能导致不一致的行为,因为它取决于缓存的状态,因此无法轻松诊断。
所以我会说:
- 请勿使用以上任何一种。相反,购买更多的锡,这是提高性能的一种更可靠(即无错误)的方式。或者
- 在应用程序已测试完裤子之后,请选择以上两种方法中最可靠的一种。
但我会说:
- 通过对应用程序进行性能分析,确保确实是PHP代码解析导致性能问题。我认为很有可能不是这样-在这种情况下,我们会通过安装其中的任何一个来浪费时间(实际上是在浪费时间浪费时间)。