我发现很多与 Apache worker MPM 相关的东西都比 Prefork MPM 运行得更快,我知道 nginx 是另一个选择,但我想坚持使用 apache 来使用 htaccess 和其他一些功能,所以我做了一个比较,使用 apache 基准测试来提供静态内容(bg.png)文件(大小=232KB),我很惊讶地看到结果 apache prefork 提供静态内容的速度比 worker 更快,差别不是很大,但是结果让我产生了怀疑,我不会根据下面的测试做出决定,所以请指导和帮助我。
两个测试都在同一台服务器上使用环回接口(127.0.0.1)localhost 进行,以避免与网络/带宽延迟相关的疑问,并且无需保持活动。
1)使用 apache prefork 进行测试
prefork MPM
启动服务器 5 最小备用服务器 3 最大备用服务器 5 服务器限制 256 最大客户端 256 每个子节点的最大请求数 4000
ab-n 1000-c 900http://localhost/bg.png
文档路径:/bg.png 文档长度:235354 字节
并发级别:900 测试时间:1.053 秒 完成请求:1000 失败请求:0 写入错误:0 总传输量:235983024 字节 HTML 传输量:235738292 字节 每秒请求数:949.68 [#/秒](平均) 每个请求的时间:947.690 [毫秒](平均) 每个请求的时间:1.053 [毫秒](平均,所有并发请求) 传输速率:已接收 218855.25 [千字节/秒]
连接时间(毫秒)最小平均值[+/-sd]中位数最大值连接:0 111 295.5 1 1000 处理中:3 137 207.8 59 631 等待中:0 136 208.1 58 631 总计:22 248 334.4 73 1024
在一定时间内服务的请求百分比(毫秒) 50% 73 66% 79 75% 660 80% 664 90% 672 95% 1019 98% 1022 99% 1023 100% 1024(最长请求)
2)使用 Worker MPM 进行测试
线程限制 200 StartServers 3 ServerLimit 25 MaxClients 2000 MinSpareThreads 50 MaxSpareThreads 200 ThreadsPerChild 100 MaxRequestsPerChild 0
文档路径:/bg.png 文档长度:235354 字节
并发级别:900 测试时间:1.061 秒 完成请求:1000 失败请求:0 写入错误:0 总传输量:264421004 字节 HTML 传输量:264146992 字节 每秒请求数:942.39 [#/秒](平均值) 每个请求的时间:955.018 [毫秒](平均值) 每个请求的时间:1.061 [毫秒](平均值,所有并发请求) 传输速率:已接收 243347.56 [千字节/秒]
连接时间(毫秒)最小平均值[+/-sd]中位数最大值连接:0 58 158.4 37 1003 处理中:31 255 330.6 88 884 等待中:0 223 336.7 50 870 总计:68 313 354.1 112 1034
在一定时间内服务的请求百分比(毫秒) 50% 112 66% 150 75% 900 80% 905 90% 920 95% 921 98% 1032 99% 1033 100% 1034(最长请求)
以下是区别
预分叉统计数据
测试所需时间: 1.053 秒 总传输量:235983024 字节 HTML 传输量:235738292 字节 每秒请求数:949.68 [#/秒](平均) 每个请求所用时间: 947.690 [毫秒](平均) 每次请求的时间: 1.053毫秒(所有并发请求的平均值)传输速率:已接收 218855.25 [Kbytes/sec]
工人统计
测试所需时间: 1.061 秒 总传输量:264421004 字节 HTML 传输量:264146992 字节 每秒请求数:942.39 [#/秒](平均) 每个请求所用时间: 955.018 [毫秒](平均) 每次请求的时间: 1.061 [毫秒](所有并发请求的平均值)传输速率:已接收 243347.56 [Kbytes/sec]
根据上述统计
测试所用时间 + 每个请求所用时间prefork 比 worker 少。所以请指导和建议,prefork 是否最适合提供静态内容?