AJP与HTTP比较和分析

2024-01-24 04:38
文章标签 分析 比较 http ajp

本文主要是介绍AJP与HTTP比较和分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[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 一项有明显的区别。

这篇关于AJP与HTTP比较和分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638565

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实