AJP与HTTP比较和分析

本文详细介绍了在Ubuntu10.10环境下,使用Apache和Tomcat进行服务部署时,通过AJP协议和HTTP协议进行基准测试的方法。包括错误处理、代码修改、性能指标对比(如吞吐率、总时间开销)以及结论分析。通过对比发现,使用AJP协议在并发量提升时,性能表现更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b][size=large]系统环境:[/size][/b]
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>]


[b][size=large]一、benchmark测试方法[/size][/b]
./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 //apr_err("apr_socket_recv", status);
1371 bad++;
1372 close_connection(c);
1373 return;
1374 }
然后编译安装

错误2:Too many open files (24)

(PS;使用AJP协议和HTTP协议,多次进行测试,取测试结果较好的一次进行比较)

[b][size=large]二、使用AJP后的benchmark[/size][/b]

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)



[b][size=large]三、使用HTTP 后的benchmark[/size][/b]

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)


[b][size=large]四、结论[/size][/b]
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协议的设计 [url]http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html[/url]

原因总结如下:
1、ajp使用长连接保持webServer和servlet Container的通信,减少了建立tcp连接的开销。可以通过观察tomcat/manager 下serverStatus,ajp建立的连接都处于keepalive的状态。
2、ajp使用一定的协议格式,减少了传递的报文数据大小,节省了带宽。可以通过观察ajp和http 的benchmark报告重看到,Total transferred 一项有明显的区别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值