我有两台服务器,我testingapache2的configuration。
第一台服务器:
4GB of RAM, AMD Athlon (tm) 64 X2 Dual Core Processor 5600 + Apache 2.2.3, mod_php, mpm prefork: Settings: Timeout 100 KeepAlive On MaxKeepAliveRequests 150 KeepAliveTimeout 4 <IfModule Mpm_prefork_module> StartServers 7 MinSpareServers 15 MaxSpareServers 30 MaxClients 250 MaxRequestsPerChild 2000 </ IfModule> Compiled in modules: core.c mod_log_config.c mod_logio.c prefork.c http_core.c mod_so.c
第二台服务器
8GB of RAM, Intel (R) Core (TM) i7 CPU [email protected] Apache 2.2.9, **fcgid, mpm worker, suexec** PHP scripts are running via fcgi-wrapper Settings: Timeout 100 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 4 <IfModule Mpm_worker_module> StartServers 10 MaxClients 200 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 1000 </ IfModule> Compiled in modules: core.c mod_log_config.c mod_logio.c worker.c http_core.c mod_so.c
以下testing结果非常奇怪!
新的服务器(dynamic内容 – PHP通过fcgid + suexec):
Server Software: Apache/2.2.9 Server Hostname: XXXXXXXX Server Port: 80 Document Path: XXXXXXX Document Length: 179512 bytes Concurrency Level: 10 Time taken for tests: 0.26276 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 179935000 bytes HTML transferred: 179512000 bytes Requests per second: 38.06 Transfer rate: 6847.88 kb/s received Connnection Times (ms) min avg max Connect: 2 4 54 Processing: 161 257 449 Total: 163 261 503
旧服务器(dynamic内容 – mod_php):
Server Software: Apache/2.2.3 Server Hostname: XXXXXX Server Port: 80 Document Path: XXXXXX Document Length: 187537 bytes Concurrency Level: 10 Time taken for tests: 173.073 seconds Complete requests: 1000 Failed requests: 22 (Connect: 0, Length: 22, Exceptions: 0) Total transferred: 188003372 bytes HTML transferred: 187546372 bytes Requests per second: 5777.91 Transfer rate: 1086267.40 kb/s received Connnection Times (ms) min avg max Connect: 3 3 28 Processing: 298 1724 26615 Total: 301 1727 26643
旧服务器:静态内容(jpg文件)
Server Software: Apache/2.2.3 Server Hostname: xxxxxxxxx Server Port: 80 Document Path: /images/top2.gif Document Length: 40486 bytes Concurrency Level: 100 Time taken for tests: 3.558 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 40864400 bytes HTML transferred: 40557482 bytes Requests per second: 281.09 [#/sec] (mean) Time per request: 355.753 [ms] (mean) Time per request: 3.558 [ms] (mean, across all concurrent requests) Transfer rate: 11217.51 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 3 11 4.5 12 23 Processing: 40 329 61.4 339 1009 Waiting: 6 282 55.2 293 737 Total: 43 340 63.0 351 1020
新服务器 – 静态内容(jpg文件)
Server Software: Apache/2.2.9 Server Hostname: XXXXX Server Port: 80 Document Path: /images/top2.gif Document Length: 40486 bytes Concurrency Level: 100 Time taken for tests: 3.571531 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 41282792 bytes HTML transferred: 41030080 bytes Requests per second: 279.99 [#/sec] (mean) Time per request: 357.153 [ms] (mean) Time per request: 3.572 [ms] (mean, across all concurrent requests) Transfer rate: 11287.88 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 2 63 24.8 66 119 Processing: 124 278 31.8 282 391 Waiting: 3 70 28.5 66 164 Total: 126 341 35.9 350 443
我注意到,在Apache的error.log是很多条目:
[notice] mod_fcgid: call /www/XXXXX/public_html/forum/index.php with wrapper /www/php-fcgi-scripts/XXXXXX/php-fcgi-starter
我省略了什么,或者不明白?
每秒请求的这种差异? 可能吗? 可能是什么原因?
跳出来的东西是工人vs prefork。 要隔离,你应该尝试在“新”/“秒”服务器上运行prefork。
我也怀疑“旧”的基准:
Transfer rate: 1086267.40 kb/s received
等于1.03 GB / s或8.2 Gbps。 显然,这比1Gbps的端口更快。 你在这里运行相同的testing,还是在本地和新的远程基准testing?
希望这不是一个问题的基本问题,但你是否修改相同的加载/应用程序? 例如,如果你要比较加载一个静态文件,像一个图像,正在做一些处理的PHP页面,你会得到不同的结果。 如果你的php页面也触及一个数据库,并且这两个服务器上的数据库不同,那么这也会影响结果。
我会再次build议 – 为了隔离 – 两者之间的静态文件基准。 如果你没有看到有什么不同,尝试两个相同的简单的PHP页面(这是不是另一个应用程序的一部分,只是做一个简单的像循环中的世界你好)。
一旦你在各个部分完成了苹果和苹果的基准testing,你应该有足够的信息来隔离是什么导致了不同(你的数据库服务器?文件系统?Apache的分叉模型?Apache的版本?networking基准本身?)。
1)你是否重复了足够的次数来validation结果?
2)你正在看内存的统计数据,并检查错误日志? 由于这是两个不同的apache模型(Threaded vs. Forking),调整会产生很大的影响。 所以我认为你会看到你的资源(内存和CPU)的工人版本,并可能调整可调选项。
3)在这些testing中,Apache模型,正在检索的文件的大小,php模块,或许可以使testing更类似一点,这么多不同?