我最近尝试运行一些基准测试,我想在 Windows 上检查一些东西,我发现同一台机器上 Linux 和 Windows 上的基本 HTTP Web 服务器之间存在巨大的性能差异。
我已经使用不同的客户端(Apache 的 ab 和我自己的客户端)测试了多个 Web 服务器 IIS、Apache2、Lighttpd,结果是相同的(每秒请求数),显示一个几百字节大小的简单 HTML 网页(默认 Web 服务器页面):
IIS 7.5 Apache 2.2 Lighttpd
Windows 750 800 -
Linux - 9,300 22,000
我尝试过禁用 Windows 上的防病毒软件,但结果并没有改变。
我不明白一件事,相同的硬件(i5 2.4GHz 4G)网络服务器在执行最琐碎的任务时无法处理相同的负载。
即使我是“Linux 支持者”,我仍然不明白它们怎么会有如此大的不同,同样是 64 位最新操作系统 (Linux 2.6.35 和 Windows 7),却有数量级的差异。
环境:
- 操作系统 Windows 7 64 位专业版。Linux Ubuntu 2.6.35
- HW i5 2.4 GHz,4GB 内存
- IIS 7.5,Apache 2.2
- 客户ab:
- 称为
ab -c 5 -n 10000 http://127.0.0.1/
问题:
- 我可能会错过什么以便得到巨大的差异?
在您投票关闭之前:
请注意,这是一个真正的问题,因为我正在寻找可能影响如此巨大(数量级)性能差异的因素,因为我无法相信 Windows 的表现会如此糟糕。
有人吗?
答案1
对于所有建议使用 Windows Server 2008 的响应者...
这是 AniVirus。它没有被正确禁用。
一旦禁用它,性能就会从 600 req/s 提高到 5000 req/s - 不如 Linux,但至少是合理的。
答案2
我更想看看与 Server R2 的比较。Windows 7 不应该运行 Web 服务器,尽管我同意结果的差异似乎很大。
答案3
您可以进行一项测试来查看它是否与操作系统层或更低层有关,即在运行 Windows 7 的虚拟机中重新运行 Linux 测试。如果您遇到的数字类似,但略少,那么原始 Linux 就证明 Windows 7 是罪魁祸首。如果您遇到的数字与 Windows 7 相似,则可能是 Windows 7 使用硬件的方式存在问题,可能是驱动程序问题或类似的低级问题。
答案4
使用有限数量的连接来测试几乎没有内容的静态页面是一个糟糕的测试。
您要做的是模拟 30 多个用户访问使用多种资产的 PHP 和 MySQL 的页面。
在这种情况下,您将看到配置良好的 WAMP(例如我使用的 WampDeveloper)与类似的 LAMP 设置相匹配或优于类似的 LAMP 设置。
在 Windows 下,线程是首选机制(与 Linux 上基于进程的模型相比)。
确保您使用 PHP 作为基于线程的模块(而不是 FCGI 进程,尽管那样也可以)。
编辑您的 Apache KeepAlive 和 MPM 设置...
C:\WampDeveloper\Config\Apache\extra\httpd-default.conf
KeepAlive On
KeepAliveTimeout 1
C:\WampDeveloper\Config\Apache\extra\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