性能测试培训: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. FTPS (FTP over SSL) vs. SFTP (SSH 文件传输协议): 我们如何做出选择

    第一个RFC的FTP协议发布通过网络使用FTP协议(由RFC 959或更高版本)的文件传输始于1980年,FTP提供上传,下载和删除文件,创建和删除目录,读取目录内容的功能.虽然FTP是非常受欢迎的, ...

  2. 理解 ES6 语法中 yield 关键字的返回值

    在 ES6 中新增了生成器函数的语法,本文解释了生成器函数内 yield 关键字的返回值. 描述 根据语法规范,yield 关键字用来暂停和继续执行一个生成器函数.当外部调用生成器的 next() 方 ...

  3. java第二天

    while循环 基本格式: int sum=0: int i =0:初始化循环变量值 while(i<10循环条件){ 循环变量变化的过程 i++: 循环体 sum+=i; System.out ...

  4. java数组、泛型、集合在多态中的使用及对比

    我们在使用数组,泛型集合的过程中不可避免的会碰到多态,或者说什么情况下能如何使用父数组引用子数组(集合.泛型)呢? 数组在多态中的使用 元素为父类型的数组引用可指向元素为子类型的数组对象 当数组被调用 ...

  5. 每天一个linux命令(44)--ss命令

    ss 是 socket statistics 的缩写.顾名思义,ss 命令可以用来获取socket 统计信息,它可以显示和netstat 类似的内容.但 ss 的优势在于它能够显示更多更详细的有关TC ...

  6. mfc---CFileFind

    使用CFileFind实现在指定路径下,查找指定类型文件 CFileFind.FindFile(FilePath + "\\*.*"),成功返回true,否则返回false CFi ...

  7. Robot Framework中经常用的第三方库的安装方法

    pip升级:python -m pip install --upgrade pip 一.安装robotframework-selenium2library,相当于python中的selenium    ...

  8. Eclipse标准版安装J2EE插件

    WTP 使用Eclipse IDE for Java EE Developers是非常方便,但是太大,我喜欢按需配置.首先我们来了解什么是WTP. WTP(Web Tools Platform )项目 ...

  9. Java进制转换示例

    收藏的代码,以备查询之用.进制之间转换都是以十进制作为中间层的. int os = 16; //十进制转成十六进制: Integer.toHexString(os); //十进制转成八进制 Integ ...

  10. 【2017-03-12】SQL Sever 子查询、聚合函数

    一.子查询 子查询:把一条查询语句,当做值来使用子句的查询结果必须是一列子句可以返回多行数据,但必须是一列 子句返回的值为一个值的时候: 例如: 我只知道c026这个编号,我要查询比这个车价格低的全部 ...