设为首页 收藏本站
查看: 769|回复: 0

[经验分享] Tomcat性能调校之连接器模块JIO、APR和NIO

[复制链接]

尚未签到

发表于 2018-12-5 13:50:30 | 显示全部楼层 |阅读模式
  转自:http://www.gootry.com/wangzhuan/article/100928211150/252
  Tomcat提供了三种不同的服务器设计实现方法,以服务于HTTP,并实现与服务于AJP三种设计方法相同的设计方法。
  
  JIO(java.io)
  除非在Tomcat启动时找到了APR Connector的libtcnative库,否则这是Tomcat的默认连接器实现方法,这也称为“Coyote”。
  它是一个使用java.io核心Java网络类的纯Java TCP包服务器实现。它也完全是HTTP和AJP的模块化实现
  于是用纯Java编写的,所以对完全支持Java的所有操作系统来说,JIO是二进制可随处移植的(portable)。
  许多人认为这种实现方法比主流的Apache httpd要慢,因为它是用Java编写的。假定Java总是比编译的C要慢。真的吗?请拭目以待!
  
  APR(Apache Portable Runtime)
  第二种连接服务器的方法是以Java类的方式实现,这些Java类包含了一个以C编程语言编写的、置于小的libtcnative库文件中的JNI压缩包,这些Java类轮流取决于Apache Portable Runtime(APR)库文件。
  连接Apache httpd Web服务器的类库也是在C中实现的,而且用APR进行网络通信。
  这种可选的实现方法的目标包括:使用胜过JIO连接器的相同开源C代码,作为Apache httpd的服务器实现方法,并提供至少与Apache httpd同等的性能。
  因为这种方法主要是在C中实现的,所以缺陷在于单个二进制版本的这种连接器不能像JIO连接器一样运行在所有平台上。
  这意味着Tomcat管理员需要编译连接器,因此必须具备一定的开发环境,而且可能有编译问题。
  但是,这种连接器的作者通过要求得到比这种连接器实现要快的Tomcat的Web性能,验证了这种特殊设置的效果。
  笔者将通过基准调校,让您亲眼看到其实际效果。
  NIO(java.nio)
  这是用纯Java编写的连接器(Conector)的一种可选方法。该实现用java.nio核心Java网络类以提供非阻塞的TCP包特性。
  这种Connector设计的主要目标是用非阻塞(nonblocking)的方式部分实现Connectot,以达到使用很少的线程给Tomcat管理员提供比JIO Connector执行效果更好的Connectot实现。
  另一方面,NIO Connector只需要一个线程就能分析众多连接器的请求,但每个请求随后必须运行自身线程(Java Servlet规范要求限制的)才能寻到servlet。
  因为部分请求处理是以非阻塞的Java代码完成的,因此,部分请求处理所占用的时间是Java线程不需处于在用状态的时间,这意味着小线程池可用于处理相同数量的并发请求。
  小线程池通常意味着低CPU占用,轮流使用该线程池意味着获得更好的性能。这样处理使速度更快的理论原因建立在假设高堆栈可以或不可以用于任何入的自身Web应用程序和交换负荷之上。
  因此,对一些请求处理,NIO Connector会执行更好,而对另一些请求处理,则执行效果更差,这要视其他Connector设计的情况而定。
  依靠这些Tomcat Connector,笔者在prefork及worker多线程(Multi-Process Model,缩写为MPM)编译配置下进行Apache httpd基准调校,井要求通过Apache httpd连接器模块,把基准调校的请求所在的httpd prefork和worker配置从Apache httpd发送到Tomcat。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-643691-1-1.html 上篇帖子: tomcat数据库连接池和mysql自动关闭服务 下篇帖子: MySQL和Tomcat 6.0在Netbeans6.1中的简单配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表