系统环境: 
OS:Ubuntu 10.10 (2G)
Servlet Container:tomcat-tomcat-7.0.23  (最大内存:default 256M  maxThreads:500)
Web server: apache2.2 (maxClient:250)
设置apache最大连接数
- 在/usr/local/etc/apache22/httpd.conf中加载MPM配置(去掉前面的注释):  
- # Server-pool management (MPM specific)  
- Include etc/apache22/extra/httpd-mpm.conf  
-   
- 修改d-mpm.conf中对应module如下  
- <IfModule mpm_prefork_module>  
-                 StartServers                      5  
-                 MinSpareServers                   5  
-                 MaxSpareServers                  10  
-                 ServerLimit                     3000  
-                 MaxClients                      2000  
-                 MaxRequestsPerChild               0  
- </IfModule>]  
 
一、benchmark测试方法
./ab -n 100000 -c 100 http://localhost/test
使用ab进行测试,当并发较高时,会出现以下错误
错误1:apr_socket_recv: Connection reset by peer (104)
- apache2.2及以下版本  
- 修改support下面的ab.c源代码, 大概在  
- line 1369, 修改成  
- 1368                 return;  
- 1369             } else {  
- 1370                 
- 1371                 bad++;  
- 1372                 close_connection(c);  
- 1373                 return;  
- 1374             }  
- 然后编译安装  
 
错误2:Too many open files (24)
(PS;使用AJP协议和HTTP协议,多次进行测试,取测试结果较好的一次进行比较)
二、使用AJP后的benchmark
- Benchmarking localhost (be patient)  
- Completed 10000 requests  
- Completed 20000 requests  
- Completed 30000 requests  
- Completed 40000 requests  
- Completed 50000 requests  
- Completed 60000 requests  
- Completed 70000 requests  
- Completed 80000 requests  
- Completed 90000 requests  
- Completed 100000 requests  
- Finished 100000 requests  
-   
-   
- Server Software:          
- Server Hostname:        localhost  
- Server Port:            80  
-   
- Document Path:          /test  
- Document Length:        347 bytes  
-   
- Concurrency Level:      100  
- Time taken for tests:   50.270 seconds  
- Complete requests:      100000  
- Failed requests:        0  
- Write errors:           0  
- Total transferred:      48712175 bytes  
- HTML transferred:       34708675 bytes  
- Requests per second:    1989.24 [#/sec] (mean)  
- Time per request:       50.270 [ms] (mean)  
- Time per request:       0.503 [ms] (mean, across all concurrent requests)  
- Transfer rate:          946.29 [Kbytes/sec] received  
-   
- Connection Times (ms)  
-               min  mean[+/-sd] median   max  
- Connect:        0   23  15.3     21     714  
- Processing:     2   27  19.8     24     724  
- Waiting:        1   22  15.4     20     714  
- Total:          9   50  25.3     44     747  
-   
- Percentage of the requests served within a certain time (ms)  
-   50%     44  
-   66%     49  
-   75%     53  
-   80%     55  
-   90%     64  
-   95%     73  
-   98%     87  
-   99%    101  
-  100%    747 (longest request)  
 
三、使用HTTP 后的benchmark
- Benchmarking localhost (be patient)  
- Completed 10000 requests  
- Completed 20000 requests  
- Completed 30000 requests  
- Completed 40000 requests  
- Completed 50000 requests  
- Completed 60000 requests  
- Completed 70000 requests  
- Completed 80000 requests  
- Completed 90000 requests  
- Completed 100000 requests  
- Finished 100000 requests  
-   
-   
- Server Software:        Apache-Coyote/1.1  
- Server Hostname:        localhost  
- Server Port:            80  
-   
- Document Path:          /test  
- Document Length:        347 bytes  
-   
- Concurrency Level:      100  
- Time taken for tests:   55.392 seconds  
- Complete requests:      100000  
- Failed requests:        0  
- Write errors:           0  
- Total transferred:      51415934 bytes  
- HTML transferred:       34710757 bytes  
- Requests per second:    1805.32 [#/sec] (mean)  
- Time per request:       55.392 [ms] (mean)  
- Time per request:       0.554 [ms] (mean, across all concurrent requests)  
- Transfer rate:          906.47 [Kbytes/sec] received  
-   
- Connection Times (ms)  
-               min  mean[+/-sd] median   max  
- Connect:        0   24  10.1     24     185  
- Processing:     8   31  10.7     28     215  
- Waiting:        1   26  10.0     24     198  
- Total:         13   55  12.3     51     247  
-   
- Percentage of the requests served within a certain time (ms)  
-   50%     51  
-   66%     54  
-   75%     58  
-   80%     60  
-   90%     66  
-   95%     74  
-   98%     86  
-   99%     99  
-  100%    247 (longest request)  
 
四、结论
If integration with the native webserver is needed for any reason, 
an AJP connector will provide faster performance than proxied HTTP.
前端apache,后端tomcat,通过ajp协议访问性能优于http协议,随着并发量的提升,效果会更加趋于明显。可以从吞吐率和总时间开销上观察。
(吞吐率:单位时间内计算机的处理请求来描述其并发处理能力)
可以参考下ajp协议的设计 http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html
原因总结如下:
1、ajp使用长连接保持webServer和servlet Container的通信,减少了建立tcp连接的开销。可以通过观察tomcat/manager 下serverStatus,ajp建立的连接都处于keepalive的状态。
2、ajp使用一定的协议格式,减少了传递的报文数据大小,节省了带宽。可以通过观察ajp和http 的benchmark报告重看到,Total transferred 一项有明显的区别。
AJP与HTTP比较和分析
原文:http://www.cnblogs.com/itcomputer/p/4873699.html