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

[经验分享] Jetty和Tomcat的使用及性能测试

[复制链接]

尚未签到

发表于 2015-8-7 13:02:11 | 显示全部楼层 |阅读模式

  一 测试目的
  这次对Jetty和Tomcat进行性能测试,主要是为了给新版本WebPortal的开发选择合适的Java Web Server。
  我们之前对老的Rest和新的TMMI都进行过性能测试,Rest有Akamai的缓存,性能基本没有问题。但是WebPortal的内容是不断更新的,不适合使用Akamai缓存,所以性能就全靠WebPortal本身以及均衡负载了。所以我想,在开发新版本WebPortal时,要尽量进行优化,包括硬件、Web Server、数据库访问等。
  Jetty和Tomcat是两个主要的开源Java Web Server,两者都比较成熟,Google App Engine使用Jetty,JBoss是使用Tomcat作为Web容器。究竟哪个更适合我们的需求,还是自己做测试比较靠谱。
  这次测试中,Jetty的版本是6.1.19,Tomcat版本是6.0.35。被测试的应用是Akamai地图应用(AkamaiLogParser),为了方便测试,对代码进行了部分修改,后面会介绍。
  
  二 Jetty和Tomcat的部署、配置
  我们之前版本的Rest、WebPortal都是使用embedded的Jetty进行部署。Jetty和Tomcat都能支持stand-alone和embedded方式。下面就来介绍下Jetty和Tomcat stand-alone方式的部署和配置。
Jetty的部署、配置
  1. 将Jetty的zip文件copy至服务器并解压,解压后可以看到如下文件(夹)
DSC0000.jpg
  其中,bin中是一些启动Jetty的脚本和jar文件;contextes中是各个context的配置信息,一个context相当于一个应用,比如AkamaiLogParser可以对应一个context;etc中是jetty的配置信息;webapps是jetty默认的存放部署的应用的目录,不过在这次测试中,我建立了一个文件夹myapp,用于存放AkamaiLogParser。
  2. 将AkamaiLogParser程序包copy至myapp目录下。要注意的时,要把项目所有依赖的jar文件放在{JETTY_HOME}/myqpp/AkamaiLog/webapps/WEB-INF/lib里面,jetty会在这个目录下加载需要的jar文件。另外,web.xml和spring的配置文件也可以放在WEB-INF下。
  3. 在{JETTY_HOME}/contexts下新建文件akamai.xml,文件内容为:
DSC0001.jpg
  其中contextPath是指访问AkamaiLogParser的URL,这里设置为“/”,URL就是http://domianname:port/***.html了。jetty.home是指AkamaiLogParser程序包所在的相对于{ JETTY_HOME }的路径。
  4. Log4j.properties放在{ JETTY_HOME }/ resources下,jetty会从此目录读取log配置
  5. AkamaiLogParser用到的额外配置文件conf.properties,可以直接放在{ JETTY_HOME }下,这是启动Jetty时的当前路径
  6. 在{ JETTY_HOME }下,使用java –jar start.jar启动jetty
  7. 可以使用java –XmsXXXm –XmxXXXm来调整分配给jetty的内存大小
  8. 可以在{ JETTY_HOME }/etc/jetty.xml中修改jetty的配置信息,比如jetty的端口、minThreads和maxThreads等。后面在测试中,对jetty进行性能调优时,主要就是修改minThread和maxThreads这两个参数。
Tomcat的配置、部署
  1. Tomcat的部署方法比较简单,这里仅仅是为了测试,所以没有理会log的配置等。部署方法为将AkamaiLogParser的webapps下的所有内容copy之{TOMCAT_HOME}/webapps/ROOT目录下,这里同jetty一样,需要将所有依赖的jar包放在WEB-INF/lib目录下。
  2. 使用{TOMCAT_HOME}/bin/startup.sh启动tomcat
  3. 调整为tomcat分配的内存大小的方法为,修改{TOMCAT_HOME}/bin/catalina.sh,在echo "Using CATALINA_BASE: $CATALINA_BASE"前添加如下代码:JAVA_OPTS="-server -Xms512m -Xmx2048m"。
  4. 调整连接池的方法为在{TOMCAT_HOME}/conf/server.xml的Connector节点中添加如下参数:connectionTimeout="…" maxThreads="…" acceptCount="…"。
  
  三 测试环境
被测服务器:
  CentOS 5.6 64位
  CPU:两个2.93GHz的CPU
  内存:2G
  JDK:1.6.0_29,Java HotSpot(TM) 64-Bit Server VM
  Jetty:6.1.19
  Tomcat:6.0.35
发送测试请求的Jmeter机器:
  使用三台机器运行JMeter,采用JMeter远程测试的方法(稍后介绍),其中两台机器用作JMeter server,一台用作client。
  被测服务器和Jmeter的三台机器都是同一台物理上划分出来的虚拟机,所以网络传输的速度应该很快,不会成为影响测试结果的因素。
  测试时,还对AkamaiLogParser的代码进行了修改,让每次请求都直接返回内存中的一个字符串,这样就屏蔽了磁盘文件的读写速度对测试结果的影响。
  另外,为jetty和tomcat分配的内存大小都是“-Xms512m –Xmx2048m”。
  至此,就确保了在相同的硬件条件下,jetty和tomcat的处理能力是唯一影响测试结果的因素。
  
  四 Jmter远程测试
  Jmeter远程测试中,用两种角色:server和client。Server用来向被测服务器发送请求,client用来检测测试结果。下面是本次测试中的物理环境图:
DSC0002.png
  使用Jmeter进行远程测试的步骤为:
  1. 启动Jmeter server,启动命令为:JMETER_HOME/bin/jmeter-server。由于需要同时发送数量很大的请求,需要更改为Jmeter分配的java 堆的大小,修改方法为:在JMETER_HOME/bin/jmeter.sh中添加JVM_ARGS="-Xms512m -Xmx2048m"。
  有时会碰到Server failed to start: java.rmi.RemoteException: Cannot start. XXX is a loopback address.的错误,这时需要修改/etc/hosts文件,将127.0.0.1指向localhost.localdomain,将机器的实际IP指向真实的机器名。
  2. 将Jmeter server的地址添加到Jmeter client的属性文件中。编辑JMeter控制机的属性文件。在/bin/jmeter.properties文件中找到属性"remote_hosts",使用JMeter远程服务器的IP地址作为其属性值。可以添加多个服务器的IP地址,以逗号作为分隔。
  3. 通过Jmeter client启动远程测试,添加线程组:
DSC0003.jpg
  其中“Number of Threads(users)”是同时发送的请求数量。Ramp-UP Period是在多长时间内达到并发数。Loop Count就是发送多少轮请求。
  4. 新建HTTP REQUEST:
DSC0004.jpg
  5. 创建测试结果监听器。
  6. 通过Run->Remote Start All开启测试。
  
  五 测试结果分析
  下面是测试中搜集到的数据
Tomcat测试结果
  并发数
  maxThreads
  acceptCount
  CPU
  内存
  Error%
  吞吐量(次/秒)
  4000
  2000
  2000
  47.5%
  7.5%
  0.34%
  987
  6000
  3000
  3000
  56.2%
  7.5%
  0.63%
  1150
  8000
  4000
  4000
  63.2%
  7.7%
  0.15%
  1120
  10000
  5000
  5000
  54.4%
  7.4%
  0.31%
  1188
  10000
  10000
  10000
  66.2%
  7.9%
  0.53%
  1148
Jetty测试结果
  并发数
  maxThreads
  minThreads
  CPU
  内存
  Error%
  吞吐量(次/秒)
  4000
  5000
  100
  53.9%
  29.5%
  0.32%
  1009.6
  4000
  8000
  800
  48.8%
  19.8%
  0.25%
  1000.1
  10000
  5000
  100
  58.5%
  29.4%
  3.23%
  1130
  10000
  10000
  1000
  65.1%
  20.2%
  0.99%
  1106
  上面两组数据中,红色部分为保证较低错误路的前提下获得的最佳性能。比较上面两组数据可知,tomcat的吞吐量是1188次/秒,Jetty是1009.6次/秒,两者相差并不太多,但是对于jetty,当并发数上升后,错误率也在上升,同时,Jetty也消耗更多的资源。总结而言,在本次测试环境下,tomcat性能比jetty略优,tomcat稳定性较好,资源消耗也小于Jetty。建议新版本WebPortal的开发中,选择Tomcat作为web server。
  由于本次测试的硬件环境跟MARS Production的硬件环境并不一致,测试结果对production环境中的性能表现并不一定具有参考价值。

运维网声明 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-95215-1-1.html 上篇帖子: Apache+Jetty整合 下篇帖子: Jetty和Tomcat的选择:按场景而定
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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