AJP与HTTP比较和分析
系统环境:
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 //apr_err("apr_socket_recv", status);
- 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比较和分析的更多相关文章
- Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
漏洞原理 Tomcat配置了两个Connecto,它们分别是HTTP和AJP. HTTP默认端口为8080,处理http请求:AJP默认端口8009,用于处理 AJP 协议的请求. AJP比http更 ...
- Tomcat配置(三):tomcat处理连接的详细过程
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Tomcat(三):tomcat处理连接的详细过程
Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html tomcat可以处理静态资源的请求,也可以通过servlet处理动态资源的请求 ...
- AJP协议总结与分析
Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户.默认情况下,Tomcat在server.x ...
- tomcat源码分析(三)一次http请求的旅行-从Socket说起
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...
- tomcat源码分析(一)从tomcat架构说起
p { margin-bottom: 0.25cm; line-height: 120% }
- Tomcat源码分析
前言: 本文是我阅读了TOMCAT源码后的一些心得. 主要是讲解TOMCAT的系统框架, 以及启动流程.若有错漏之处,敬请批评指教! 建议: 毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, ...
- Tomcat处理HTTP请求源码分析(上)(转)
转载自:http://www.infoq.com/cn/articles/zh-tomcat-http-request-1 很多开源应用服务器都是集成tomcat作为web container的,而且 ...
- 服务器程序源代码分析之三:gunicorn
服务器程序源代码分析之三:gunicorn 时间:2014-05-09 11:33:54 类别:网站架构 访问: 641 次 gunicorn是一个python web 服务部署工具,类似flup,完 ...
随机推荐
- [Code Festival 2017 qual A] B: flip
题意 给出一个n行m列初始全白的矩阵,每次可以翻转一行/一列的全部格子的颜色.问任意次操作后能否使得恰好有k个黑色格子. n,m<=1000 分析 显然要么翻转一次要么不翻转. 最终黑色格子数只 ...
- (转)Linux GCC常用命令
1简介 2简单编译 2.1预处理 2.2编译为汇编代码(Compilation) 2.3汇编(Assembly) 2.4连接(Linking) 3多个程序文件的编译 4检错 5库文件连接 5.1编译成 ...
- [FJWC2018]全排列 DP
题面 题面 题解 (表示第一段文字导致我在考场上没看懂题--因为我以为这个定义是定义在整个排列上的,所以相似 = 相同.结果其实是可以应用在一个区间上--) 首先我们发现,2个区间相似,其实就是离散化 ...
- BZOJ3110 K大数查询 【线段树 + 整体二分 或 树套树(非正解)】
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- 女神(goddess)——组合数学
出自某模拟赛. 题目大意: 对1e9+7取模. 数据范围 20 % : n<=300 40 % : n<=2,000 50 % : n<=10,000 70 % : n<=1 ...
- HashCode与Equals回顾
HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...
- iOS APNs实战分享
序言: 因为App的功能需要,最近一直在调研苹果的APNs推送,开始时觉得超麻烦,现在感觉还是比较easy,“难者不会,会者不难”,自己踩过了这么多的坑终于会了,不出来吐槽(装X)一下对不起自己,23 ...
- 源码包安装 NGINX时候遇到的错误以及解决办法!
最近跟一个公司合作,要把我们的应用安装在他们的服务器上,不过问题来了.他们为了他们自己服务器安全,不给我们root权限,只给了我们普通用户权限,所有的程序都要装在规定的路径里,限制可不少.没办法装吧~ ...
- HTML5标签的兼容处理
/* 当使用HTML5标签时为了兼容问题必须声明告诉浏览器这是标签 html5shiv.js这个插件已经帮你声明了所有HTML5的标签不需要自己声明 */ /* 这是告诉浏览器这是一个标签 */doc ...
- package.json文档
之前在博客中写过一篇关于 " node.js的安装配置 " 的文章,里面有提到利用 gulp watch 来监听文档的变化.其中需要 package.json 文件才能实现效果,所 ...