博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
阅读量:6203 次
发布时间:2019-06-21

本文共 1766 字,大约阅读时间需要 5 分钟。

tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。

1)bio

默认的模式,性能非常低下,没有经过任何优化处理和支持.

2)nio

利用java的异步io护理技术,no blocking IO技术.

想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为

<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" 

connectionTimeout="20000" 
URIEncoding="UTF-8" 
useBodyEncodingForURI="true" 
enableLookups="false" 
redirectPort="8443" /> 
启动后,就可以生效。

3)apr

安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

必须要安装apr和native,直接启动就支持apr。下面的修改纯属多余,仅供大家扩充知识,但仍然需要安装apr和native

如nio修改模式,修改protocol为org.apache.coyote.http11.Http11AprProtocol

Tomcat的四种基于HTTP协议的Connector性能比较 

<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/> 
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" 
redirectPort="8443"/> 
<Connector executor="tomcatThreadPool" 
port="8081" protocol="HTTP/1.1" 
connectionTimeout="20000" 
redirectPort="8443" /> 
<Connector executor="tomcatThreadPool" 
port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" 
connectionTimeout="20000" 
redirectPort="8443" />

我们姑且把上面四种Connector按照顺序命名为 NIO, HTTP, POOL, NIOP

为了不让其他因素影响测试结果,我们只对一个很简单的jsp页面进行测试,这个页面仅仅是输出一个Hello World。假设地址是 

我们依次对四种Connector进行测试,测试的客户端在另外一台机器上用ab命令来完成,测试命令为: ab -c 900 -n 2000  ,最终的测试结果如下表所示(单位:平均每秒处理的请求数):

NIO HTTP POOL NIOP 

281 65 208 365 
666 66 110 398 
692 65 66 263 
256 63 94 459 
440 67 145 363

由这五组数据不难看出,HTTP的性能是很稳定,但是也是最差的,而这种方式就是Tomcat的默认配置。NIO方式波动很大,但没有低于280 的,NIOP是在NIO的基础上加入线程池,可能是程序处理更复杂了,因此性能不见得比NIO强;而POOL方式则波动很大,测试期间和HTTP方式一样,不时有停滞。

由于linux的内核默认限制了最大打开文件数目是1024,因此此次并发数控制在900。

尽管这一个结果在实际的网站中因为各方面因素导致,可能差别没这么大,例如受限于数据库的性能等等的问题。但对我们在部署网站应用时还是具有参考价值的。

本文转自 知止内明 51CTO博客,原文链接:http://blog.51cto.com/357712148/2060730,如需转载请自行联系原作者
你可能感兴趣的文章
【译】《学习JavaScript设计模式》(二)
查看>>
使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
查看>>
Auto Layout 和 Constraints
查看>>
AutoScaling 与函数计算结合,赋予更丰富的弹性能力
查看>>
WPF中的动画——(一)基本概念
查看>>
使用Kubespray部署生产可用的Kubernetes集群(1.11.2)
查看>>
Java入门系列-22-IO流
查看>>
(转)在阿里,我们如何管理代码分支?
查看>>
Template、ItemsPanel、ItemContainerStyle、ItemTemplate
查看>>
Python 3.8.0a2 发布,面向对象编程语言
查看>>
Docker认识基础
查看>>
归 [拾叶集]
查看>>
统计0-n数字中出现k的次数
查看>>
MySQL:Innodb page clean 线程 (二) :解析
查看>>
云原生全球最大峰会之一KubeCon首登中国 Kubernetes将如何再演进?
查看>>
哲学到编程:思想的实例化
查看>>
puppet puppet模块、file模块
查看>>
Dubbo 源码分析 - 服务引用
查看>>
Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装
查看>>
图嵌入综述 (arxiv 1709.07604) 译文五、六、七
查看>>