Jboss(准确地讲应该是Jboss AS)是一款基于 J2ee 的免费开放源码应用服务器,由 Jboss 社区维护(注意区别于 Jboss 的另一款商用应用服务 JBoss EAP,由 Radhat 提供商业支持)。 它是一个管理 EJB 的容器,严格讲 Jboss 核心服务仅支持 EJB 服务器,是不包括 JSP 和 Servelt 的 web 容器,所以 Jboss 之前一直绑定 Tomcat 作为 Web 容器,但 Web 容器毕竟是应用服务器中最重要的模块之一,更为了满足 Jboss应用服务的集成需要,所以到 Jboss 8.0(改名叫 wildfly)的版本后,开奖,Jboss 终于有了属于其开源组织旗下的一款自己的 Web 容器“Undertow”。 现在问题来了:同样是免费开源,做为深受广大人民群众喜爱的 Web 应用服务龙头“Tomcat”,和基于 Undertow 的 Jboss/wildfly,在做为 Servelt 容器应用方面孰优孰劣? 秉着不做吃瓜群众,绝知此事要躬行的原则,作者以 tomcat v8.0.26和 Jboss v9.0.0(wildfly v9.0.0)为例,亲测了一把。 1、 测试方法简述1)系统分析及需求收集 现今大多数互联网应用系统的数据流转为: 首先各种终端(PC/手机/Pad)发起请求(http 或者 scoket 协议); 其次经过各种“软硬件大拿”们的路由调度优化,到达系统定义的接入层应用系统服务器(Tomcat/Jboss 应用处); 最后到后台的核心业务应用服务器(Tomcat/Jboss 应用处)。 应用系统之间的消息流转用的一般是基于一些开源 RPC 框架(Dubbo,Protobuf)的远程调用。 因此有以下两个特点: Tomcat/Jboss 不作用静态页面(.htm,.jsp)的服务器,该功能由 nginx 承担 Tomcat/Jboss 独立部署,不进行 tomcat/jboss 服务器间的(支持实时服务器间 session,context 复制)集群 综上:Tomcat/Jboss 的性能优化比对测试,仅验证其作为 Servelt 容器的能力即可。 2)测试软硬件环境 物理环境 使的4*cpu+16G内存的虚拟机 软件环境 操作系统:linux(Oracle Linux Server release 6.5) 软件版本:tomcat8.0.26,Jboss9.0.0 3)性能参数 JVM内存:8G(-Xms512m –Xmx8192m) maxThreads:测试512/1024/2048三档 enableLookups:固定为false acceptCount:固定为512/1024 connectionTimeout:固定为30000 工作模式:NIO/APR ax_tw_buckets = 60000 4)Servelt测试桩及部署 测试桩不进行复杂的业务处理,仅进行简单的参数解析及回显: 性能测试工具的调用方调度式: :3030 /loginServelt?username=1&password=1 2、 测试内容 相同压力下,Tomcat/Jboss 的处理效率(TPS,响应时间)。 以100/200/300/500/1000/2000用户分档进行并发压测,观察 tomca t和 Jboss 在各档配置时的处理效率,记录 TPS、响应时间、内存占用、CPU。 3、 测试数据及分析1)测试数据 说明: tomcat 采用的是最优的 apr 模式,Jboss 9.0.0内置的是 undertow,只有 NIO 模式一种; 失败的原因,从错误信息看,atv,全部是连接服务器失败,说明在高负荷情况下,服务器来不及接收新的连接请求造成的; 上述测试采用的是用测试工具进行的压测,同时采用 AB 工具进行过测试(测试结果和上述工具的测试结果一样),具体数据参见附录1:AB测试记录; 本部分比对测试过程中,网络出现较明显延时开销,致总体 TPS 不高,但这也会比较符合实际生产的环境。 2)比对结论 相同配置及被测业务模式下,Jboss 处理效率低于 tomcat 约30%左右; (注意:实际是 Jboss 约比 Tomcat 多花了10ms 左右,案例中在测试业务耗时很短的情况下看起来差异很大,而实际业务耗时比较大的情况下,比如业务需要1s,那么 Jboss 只低约10ms/1000ms=1%左右) 相同的业务处理压下(TPS)下,tomcat 占用的CPU略低于 Jboss; Tomcat 上用的内存小于 Jboss(这点可忽略不计,两者都占用不大,内存又便宜); 在高并发下,Jboss 有更高的失败率。 结论:Tomcat 在处理效率、CPU 占用、内存占用上、业务成功率均优于 Jboss。 结束语 (责任编辑:本港台直播) |