注:本文乃http://www.nexdot.net/blog/2010/02/09/wincache-apache-and-a-pretty-graph/的全文翻译,文中观点、措辞不代表本人观点:)
我本想写一篇以WinCache为主题的文章,而不是关于加速器/缓存器的。但是当我打开微软的站点:Microsoft.com,发现Windows Cache extension for PHP website的介绍里说到:
“Windows Cache Extension for PHP is a PHP accelerator that is used to increase the speed of PHP applications running on Windows and Windows Server. Once the Windows Cache Extension for PHP is enabled and loaded by the PHP engine, PHP applications can take advantage of the functionality without any code modifications..”
这篇文章只说到IIS,一点也没有提及Apache,我决定试一试,令我感到惊讶的是,WinCache实际上是支持Apache的,于是我决定对比一下WinCache和其他能在Windows+Apache环境下使用的加速器。
我参考了以下两篇IIS下针对Wincache的类似测试:
- PHP on Windows: The WinCache 1.0 Benchmark – ibuildings.com techPortal, Ivo Jansch
- WinCache – Preliminary tests look REALLY good. – Cal Evans
你可以在下列网站得到Wincache的更多信息:
- Windows Cache extension for PHP website on Microsoft.com
- The PECL repository page for WinCache
- Ruslan Yakushev’s blog posts about WinCache (WinCache Developer)
测试环境:
- 硬件
- AMD Athlon 64 3800+ (2.50GHz, single core)
- 2.0GB DDR2
- 软件
- Windows Server 2003 w/ SP2
- MySQL 5.1.40, locally installed
- Apache 2.2.14 vc9
- mod_fcgid 2.3.4
- php 5.3.1 ts/nts vc9
- WordPress 2.9.1 base install (wordpress is a good “everyman” product for simulating “real world” use, even if its code is ugly)
- 加速器/缓存器
- APC 3.1.3.0 (3.1) (NTS)
- WinCache 1.0.1117.0 (1.0, stable) (NTS)
- XCache 2.0.0-dev(r688) (TS)
- eAccelerator 0.9.6rc1 (TS)
测试过程:
为了尽量保证测试的公平,我写了个批处理文件来依次执行如下动作:
- 关闭apache服务
- 启动apache服务
- 运行 ab (Apache 测试), 输出文本文件
- 重复 1-3 的同时增加压力等级 (1, 3, 5, 10)
- 通知我所有测试结束.
除了测试每个加速器/缓存器的相对性能,我也想看看不同压力等级下的情况,这就是为什么要在第4步加入不同等级测试的原因,每次测试完毕,我就在PHP.ini里更改加速器/缓存器,确保每个加速器的设置平等(一样的共享缓存值等等)。全部测试完成后我通过生成的文件绘制了一幅全面的对比图。
我同样也跑了两次不用加速器的测试来作为基准,一次用TS模式(PHP作为模块),一次用NTS模式(通过FastCGI运行PHP)
测试结论:
让我们简单分析一下:
- 不用加速器/缓存器是愚蠢的. 性能图表表明用任何加速器/缓存器所带来的性能提升都是令人惊异的. 就此来说, 如果你不做缓存或者加速,你就是个笨蛋.
- Non-Thread Safe(NTS, FastCGI) 下的PHP表现比Thread Safe (TS, Module)环境下的 PHP好. (废话)
- 从图形和我的测试来看,Wincache是完全可以运行在Apache上的, 只是微软的WinCache 文档仅仅提到了 IIS. 这对 Windows上跑的Apache是个好消息, 因为WinCache 只能用于 windows 操作系统– 不像其他的加速器/缓存器是为Linux开发的,随后才添加了对windows的支持.
- XCache的性能会随着压力测试的增强而提高. 其他加速器在不同的压力测试中则比较平均. 我很想再试试用更大并发数量测试,看看XCache的性能下降节点.
- WinCache 是性能最强的加速器/缓存器.(通过之前这些测试环境和设置)
- XCache and APC 在不同压力下的测试表现恰好相反. eAccelerator 实际上成了XCache 和 APC的基准线, 只是平均下来比它们稍好一些.
- APC 在最低等级的测试下,性能和WinCache差不多一样好.
这个测试说明了什么?
在我的测试下, Windows系统,用Apache,我认为WinCache是一个可用的加速器/缓存器. 而不是说WinCache是最好或唯一的选择;仅仅是可以选用 —无论测试结果怎样. 为什么? 因为 benchmarks suck 以及这些测试只是考察了特定环境和相对压力下的性能. 你会添加其他的功能. 你会用不同的设置. 所以你会得到不同的测试结果。那么,以后我自己会用WinCache吗? 答案是肯定的, 而且我也会推荐给其他人。
