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测试桩及部署
测试桩不进行复杂的业务处理,仅进行简单的参数解析及回显:
性能测试工具的调用方调度式:
http://192.168.xxx.xxx: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 模式一种;
失败的原因,从错误信息看,全部是连接服务器失败,说明在高负荷情况下,服务器来不及接收新的连接请求造成的;
上述测试采用的是用测试工具进行的压测,同时采用 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。
结束语
以上 Tomcat/Jboss 的性能比对测试结果:“Tomcat 在处理效率、CPU 占用、内存占用上、业务成功率均优于 Jboss;” 仅验证其作为 Servelt 容器的能力,所测试为一定条件下单点单机的测试数据,不涉及 Tomcat/Jboss 的集群性能测试(集群都交给 RPC 框架本身自己定义处理)。
此外文中测试结论的得出均基于特定测试环境下所得的客观测试数据,仅做参考,不做为通用型技术选型的一般性依据。
附录:
本文作者:黄方敏(点融黑帮),毕业于湘潭大学,现就职于点融网工程部Infra团队任性能测试开发工程师。曾任职于思科网讯,文思海辉,多年软件测试领域经验。