我最近试过运行一些基准testing,我想在Windows上检查一些东西,并发现在同一台机器上的基本HTTP Web服务器与Linux和Windows之间有巨大的性能差异。
我testing了几个Web服务器IIS,Apache2,Lighttpd与不同的客户端Apache的AB和我自己的客户端,结果是相同的(请求每秒)ID显示一个简单的HTML网页(默认的Web服务器页面)尺寸:
IIS 7.5 Apache 2.2 Lighttpd Windows 750 800 - Linux - 9,300 22,000
我试图在Windows上禁用反病毒,但结果并没有改变。
我不明白一件事,如何在相同的硬件(i5的2.4GHz的4G)的Web服务器在最琐碎的任务不能处理相同的负载。
即使你是“亲Linux”,我仍然无法得到它是如何不同,两个64位最新的操作系统(Linux 2.6.35和Windows 7),但差距在一个数量级。
环境:
ab -c 5 -n 10000 http://127.0.0.1/ 题:
在您投票结束之前:
注意这是一个真正的问题,因为我正在寻找可能影响如此巨大(数量级)的性能差异的可能因素,因为我无法相信Windows可以performance得如此糟糕。
任何人?
对于所有build议使用Windows Server 2008的响应者
这是AniVirus。 它没有正确禁用。
一旦被禁用,性能从600 req / s提高到5000 req / s – 不如Linux,但至less是合理的。
我会更有兴趣看到与服务器R2的比较。 Windows 7不应该运行Web服务器,但我同意结果的差异似乎极端。
你可以做一个testing,看看它是否与操作系统层或更低的操作是重新运行的Linuxtesting,而在一个坐在Windows 7的虚拟机。如果你遇到的数字相似,但稍微less一点,那么原来的Linux它certificateWindows 7是负责任的。 如果您遇到类似于Windows 7的数字,您可能在Windows 7使用您的硬件的方式有问题,可能是驱动程序问题或类似的低级别问题。
在使用有限数量的连接的情况下使用less量到不使用内容的静态页面是一个不好的testing。
你想要做的就是模拟30多个用户访问页面,这些页面同时拥有多个资源的PHP和MySQL。
在这种情况下,你会看到一个configuration良好的WAMP(就像我使用的WampDeveloper)匹配或者胜过类似的LAMP设置。
在Windows下,线程是首选的机制(相对于Linux上的基于进程的模型)。
确保你使用PHP作为基于线程的模块(不是FCGI进程,尽pipe这也可以)。
编辑您的Apache KeepAlive和MPM设置…
C:\ WampDeveloper \ CONFIG \ Apache的\额外\的httpd-default.conf
KeepAlive On KeepAliveTimeout 1
C:\ WampDeveloper \ CONFIG \ Apache的\额外\的httpd-mpm.conf
ThreadsPerChild 64 ThreadLimit 64
这将设置约64个线程,每个线程保持在同一个客户端大约1秒。
ab -c 32 -n 10000 http://127.0.0.1/page-with-PHP-and-MySQL-and-Assets.php