我现在非常困惑...
我一直使用 Nginx 来提供静态文件并将 php 传递给 Apache。我安装了一台 4GB 内存的新机器,安装了带有 mpm_prefork 模块的 Apache 2.4.7 和 NginX 1.4.6。我设置了所需的一切,并决定运行一些 ab 测试。结果令我震惊。在每项 ab 测试中,Apache 的表现都与 NginX 一样好。
这对于 Apache 2.4 来说正确吗?我读过有关 2.4 性能升级的文章,但是过去 NginX 会破坏 Apache。我是否遗漏了什么?
阿帕奇:
Concurrency Level: 100
Time taken for tests: 1.157 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 279000 bytes
HTML transferred: 21000 bytes
Requests per second: 864.65 [#/sec] (mean)
Time per request: 115.654 [ms] (mean)
Time per request: 1.157 [ms] (mean, across all concurrent requests)
Transfer rate: 235.58 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 24 32 11.3 27 236
Processing: 27 78 15.6 77 380
Waiting: 26 78 15.6 77 379
Total: 55 109 21.1 104 404
Percentage of the requests served within a certain time (ms)
50% 104
66% 116
75% 121
80% 123
90% 129
95% 135
98% 162
99% 173
100% 404 (longest request)
NginX的:
Concurrency Level: 100
Time taken for tests: 1.026 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 362000 bytes
HTML transferred: 21000 bytes
Requests per second: 975.00 [#/sec] (mean)
Time per request: 102.564 [ms] (mean)
Time per request: 1.026 [ms] (mean, across all concurrent requests)
Transfer rate: 344.68 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 24 33 14.4 29 223
Processing: 24 34 39.2 28 664
Waiting: 24 34 39.2 28 664
Total: 50 67 42.2 57 691
Percentage of the requests served within a certain time (ms)
50% 57
66% 72
75% 76
80% 77
90% 80
95% 86
98% 97
99% 240
100% 691 (longest request)
这在我的所有测试中都是一致的。这次测试的性能差距是我所有测试中最大的。通常 Apache 的原始请求数/秒比 NginX 少 5%-10%。
如果 Apache 2.4 实际上接近 NginX,那么我认为设置反向代理以及随之而来的所有其他复杂性是没有意义的。
有什么想法吗?
答案1
在这样的测试中,我期望 Apache 在启动 100 个子进程后,在整个测试期间保持它们处于活动状态,因此它能够实现与 Nginx 的事件驱动单进程模型相当的性能。我敢打赌,如果您将 Apache 的 StartServers 和 MinSpareServers 设置为 100,您甚至可以进一步缩小基准差距。不过,我预计所有 httpd 进程的内存使用率会更高,以实现相同的并发性,这可能是也可能不是一个很大的缺点,具体取决于您的可用 RAM 和最大预期并发性。