性能测试培训:tomcat性能调优方法

 

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。在poptest的loadrunner的培训中,为了提高学员性能优化的经验,加入了很多服务器方面的优化知识,为性能调优的能力打下基础。今天说明下tomcat性能优化的方法。(大家对课程感兴趣,请加qq:564202718)

tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。Apache 为HTML页面服务,Tomcat 实际上运行JSP页面和Servlet。Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为8.0。


你可以通过以下步骤来提高tomcat服务器性能:
1.增加JVM堆内存大小
2.修复JRE内存泄漏
3.线程池设置
4.压缩
5.数据库性能调优
6.Tomcat本地库
7其它选项

第一步:增加JVM的栈内存
tomcat服务器遇到比较普遍的问题是“内存溢出”. 产生问题的原因是tomcat分配比较少的内存给进程,通过修改Tomcat的配置文件(Windows下catalina.bat或Linux下catalina.sh)增加JVM的栈内存解决.这样JVM不用关注调用垃圾回收,服务器分配更多的资源处理web请求。
找到"\tomcat server folder\bin\catalina.sh"文件,内容如下:

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms1024m -Xmx1024m
-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m
-XX:MaxPermSize=512m -XX:+DisableExplicitGC"

-Xms – 指定初始化时化的栈内存
-Xmx – 指定最大栈内存
在重启你的Tomcat服务器之后,这些配置的更改才会有效。

第二步:避免JRE内存泄露
内存泄漏会引起性能表现不佳,tomcat版本6.0.26及以上就解决了服务器泄露问题,因为它包含了一个监听器来处理JRE和PermGen的内存泄漏。使用的监听器是:
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
你可以在“tomcat project folder/conf/server.xml”找到。

第三步:线程池设置
线程池的设置决定了Web请求负载的数量,“maxThreads”的值应该根据流量的大小来设置。值过低,没有足够的线程来处理请求,没有处理的请求将进入等待状态,只有当一个的处理线程释放后才会处理在线程池等待的请求;如果设置的太大,Tomcat的启动将花费更多时间。
<Connector port="8080" address="localhost"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8181" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

上述配置,maxThreads值设定为“250”,这决定了服务器处理的并发请求的最大数量。这个属性的默认值为“200”。任何多出的并发请求将收到“拒绝连接”的错误提示,直到另一个处理请求进程被释放。错误看起来如下:
org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) are
currently busy, waiting. Increase maxThreads (250) or check the servlet status

如在测试程序的过程中出现上述提示,务必检查上述错误是否是由于单个请求花费太长时间造成的,这就是因为连接池数量少了,设置不合理,导致请求都在等待,连接得不到不释放,进程将不会处理其它请求。用Loadrunner请注意在加压的时候可以通过加入页面请求的验证代码,如:
web_reg_find("Text= xxxxxx check the servlet status ",LAST);

备注:注意: 如果请求的数量超过了“750”,建议服务器最好使用“Tomcat集群”。也就是说,如果有“1000”请求,两个Tomcat实例设置“maxThreads= 500”,而不在单Tomcat实例的情况下设置maxThreads=1000。在做性能测试的时候会有1000w用户的访问,但是由于loadrunner没有合适的Licese,另外服务器的可能还会继续增加,用户数继续增加,我们就通过服务器实例的增长趋势和用户数的增长建立关联关系,来预估服务器的负载能力。

第四步:压缩
server.xml配置文件中设置压缩的选项。设置connector:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8181" compression="500"
compressableMimeType="text/html,text/xml,text/plain,application/octet-stream" />

compression中设置大于等于500bytes时才会压缩。设置属性compression="on"或者off开关设置是否压缩。

第五步:数据库性能调优
Tomcat性能在等待数据库查询时候会导致性能降低。如今大多数应用程序都是使用可能包含“命名查询”的关系型数据库。Tomcat启动时加载命名查询,会提升性能。另一件重要事是确保所有数据库连接正确地关闭。关注最大空闲数(maxIdle),最大连接数(maxActive),最大建立连接等待时间(maxWait)属性的值。
你可以通过调用数据库性能测试来找到正确的值。

说明:命名查询是把SQL语句配置到实体类的文件(*.hbm.xml)中。

第六步: Tomcat原生库
Tomcat的原生库基于Apache可移植运行时(Apache Portable Runtime简称APR),给程序员提供了超强的扩展性和性能,在产品运作中帮助融合原生的服务器技术以展现最佳的性能。安装说明请参考Tomcat Native Library – (APR) Installation。
第7步 其他选项
这些选项是:
a.开启浏览器的缓存,这样读取存放在webapps文件夹里的静态内容会更快
b.每当开机时,Tomcat服务器应当自动地重启。
一般情况下HTTPS请求会比HTTP请求慢。如果你想要更好的安全性,即使慢一点我们还是要选择HTTPS。

性能测试培训:tomcat性能调优方法的更多相关文章

  1. nginx+keepalived+tomcat之tomcat性能调优

    body{ font-family: Nyala; font-size: 10.5pt; line-height: 1.5;}html, body{ color: ; background-color ...

  2. Tomcat性能调优实战

    今日帮朋友做了tomcat性能调优的实际操作,心得记录一下. 服务器:Windows2017 配置:CPU 4 内存 8G Tomcat8.0+版本. 压力测试工具:apache-jmeter-4.0 ...

  3. Tomcat性能调优后, 启动出现警告问题 [did not find a matching property.]

    http://blog.csdn.net/dracotianlong/article/details/8963594 Tomcat性能调优后, 启动出现警告问题 [did not find a mat ...

  4. tomcat有哪些性能调优方法

    前几天看见一篇介绍性能调优文章,觉得不错.特此收藏(http://blog.csdn.net/lifetragedy/article/details/7708724)

  5. Web app 的性能瓶颈与性能调优方法

    1. web app 性能测试工具使用 2. mysql 性能分析与调优方法

  6. Tomcat性能调优-JVM监控与调优

    参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...

  7. 【转】tomcat性能调优

    一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   ...

  8. 通向架构师的道路之 Tomcat 性能调优

    一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: 吞吐量 Responsetime Cpuload MemoryUsage 我们也 ...

  9. (转载)通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔

    转载自:https://blog.csdn.net/lifetragedy/article/details/7708724 参考文章:tomcat以及常用web容器线程池的实现原理https://bl ...

随机推荐

  1. java dbutils查询数据库时无法给部分字段赋值原因

    1,javaBean如下: public class User {        /**     * 用户唯一标识(ID)     */    private String uid;    /**   ...

  2. angular、vue使用感受

    最近开始学习并使用vue.js,并使用vue+node开发了一个移动端APP来练手,下面想聊聊我对于vue的粗浅看法,并将它和angular进行一些对比: 1.vue是一个轻量.高效的前端组件化框架, ...

  3. Java虚拟机学习 - 体系结构 内存模型(1)

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内 ...

  4. JavaScript学习--8.1

    JavaScript学习--8.1(常见的js代码兼容工具总结) 1.取css样式表和非行间样式的属性 function getStyle(obj,attr){ if(obj.currentStyle ...

  5. Eclipse多个console的使用

    我们在使用Eclipse开发服务器端和客户端时,经常需要同时运行服务器端和客户端,以便联调运行情况.而我之前一般有两种做法: 使用Java的命令行模式运行,但这种做法通常比较麻烦,因为要使用大串的cl ...

  6. jQuery的动态绑定事件的应用

    注意:bind()的事件绑定是只对当前页面选中的元素有效.如果你想对动态创建的元素bind()事件,是没有办法达到效果的 <script src="jquery-1.11.2.min. ...

  7. 2017-02-23 switch case 循环语句

    另一个分支语句:switch..case.. switch(变量){    case 值:代码段;break;    case 值:代码段;break;    ...    default:代码段;b ...

  8. vue关于class和样式的使用

    这篇文章主要为大家详细介绍了Vue.js的Class与样式绑定,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 数据绑定一个常见需求是操作元素的 class 列表和它的内联样式.因为它们都是 att ...

  9. 扩大按钮 btn 响应区域

    方法一:类别 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c91b13 } p.p2 { margin: 0 ...

  10. JAVA面试题和答案

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...