寄上一篇Tomcat的接收请求方式:BIO/NIO/APR继续
环境介绍
version:Apache Tomcat 8.5
操作系统:Mac OS X 10.14.5
JVM:1.8.0
测试数据场景:获取一个电商系统中的一个商品首页数据
测试工具:ab压力测试
环境配置
- 在一台或者环境一样两台机器上搭配两个Tomcat,我是一台Mac OS X 10.14.5,所以一台机器同时运行两个Tomcat应用服务器,这个配置方式请参考:两个一样的tomcat不能同时启动解决方法
- 两个Tomcat应用服务器server.xml配置分别,请参考:Tomcat的接收请求方式:BIO/NIO/APR
- 端口:APR:8081 和 NIO:8082
<Connector port="8082" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8442" />
<Connector port="8081" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8441" />
配置如好,分别启动如下图
测试性能
测试方法:ab压力测试
请求处理条数:1000
并发数:100
命令
APR:ab -n 1000 -c 100 http://127.0.0.1:8081/app-customer-guide/product/detail?productId=60e6402730cb40d4a304afb671726937&t=1555393258040
NIO:ab -n 1000 -c 100 http://127.0.0.1:8082/app-customer-guide/product/detail?productId=60e6402730cb40d4a304afb671726937&t=1555393258040
请求界面
请求数据对比数据:Requests per second (吞吐率)
计算公式:总请求数/处理完成这些请求数所花费的时间,即
Request per second=Complete requests/Time taken for tests
请求方式 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 第六次 | 第七次 |
---|---|---|---|---|---|---|---|
NIO | 10680.11 | 13599.15 | 13556.38 | 14628.22 | 15350.84 | 12232.42 | 15115.10 |
APR | 9348.77 | 11787.73 | 13090.89 | 13919.24 | 12253.85 | 14820.08 | 12099.36 |
请求数据对比数据:Time taken for tests(处理完成这些请求数所花费的时间)
请求方式 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 第六次 | 第七次 |
---|---|---|---|---|---|---|---|
NIO | 0.094 | 0.074 | 0.074 | 0.068 | 0.065 | 0.082 | 0.066 |
APR | 0.107 | 0.074 | 0.076 | 0.077 | 0.072 | 0.067 | 0.083 |
注:开启了apr之后,jvm用到的native内存会增大
Jconsole观察记录
一次100的并发量请求执行数1000,循环两分钟
APR处理方式
NIO处理方式
以上只是片面的测试,覆盖率和环境都有局限性,如果有错误的地方或好的意见请不吝赐教,共同讨论。谢谢