使用JMeter对Tomcat进行压力测试与Tomcat性能调优

一、准备工作。

1、安装JDK1.6或1.6版本以后的,并配置环境变量。

2、在Apache的官网下载最新的Jmeter,http://jmeter.apache.org/download_jmeter.cgi,截止目前为止,最新的Jmeter是2.12版本,需要注意的是下载使用的时候不能下载source版本的,必须下载内容更加完整的binaray版本的,比如如果下载apache-jmeter-2.12_src.zip,运行jmeter.bat时,会出现下面的exception:

unable to access jarfile apachejmeter.jar error value=1

这个exception的原因是apache-jmeter-2.12_src.zip中的bin目录中,缺少了ApacheJemeter.jar.所以要下载binary版本的。

3、在Apache的官网上下载Tomcat,本文中以Tomcat7.0.42为例。

二、开发一个简单的J2EE工程,可以是基于Servlet的,可以是基于Spring等MVC框架的,而且不需要实现什么样的功能,只需要满足用户访问http://localhost:9999时,浏览器中能够输出(index.html)Hello World或者其它任何内容。

三、开始在Jmeter中配置模拟对Tomcat的index.html(localhost:9999)进行并发访问。

首先是使用Tomcat 7.0.42的默认配置

1、选中Test Plan,点击Edit菜单按钮,选择Add操作,选择Thread(Users),然后选择Thread Group创建一个线程组。

2、选中Thread Group,点击Edit菜单按钮,选择Add操作,选择Sampler,并选择Http Request。

3、选中Test Group,点击Edit菜单按钮,选择Add操作,选择Listener,然后分别添加Aggregate Graph(聚集图形),View Results Tree(查看结果树)。

3、不修改Tomcat的默认配置,启动Tomcat,由于默认的Tomcat运行在8080端口,将上面的9999端口先改回8080或者遵照后面点的步骤将Tomcat默认的8080端口改为9999。

4、启动Tomcat。

5、点击上面的绿色执行按钮执行该测试计划。

由测试线程组可知,Jemeter将模拟150000个线程请求不断的访问localhost:8080。执行10分钟后,运行结果截图可得:

下面将详解这个聚合报告中的每个参数:

1)Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,label显示的就是 Name 属性的值

2)#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100,这里显示的应该是150000而不是172649,之所以是172649,是因为我中间点击停止,然后又再原来的基础上重新开始执行。

3)Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

4)Median:中位数,也就是 50% 用户的响应时间

5)90% Line:90% 用户的响应时间

6)Min:最小响应时间

7)Max:最大响应时间

8)Error%:本次测试中出现错误的请求的数量/请求的总数

9)Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

10)KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec 
这里我们可以看到,在这172649多次的访问之中,tomcat的访问出错率是0.15%,即大概有100多次的请求是由于忙碌而失败了的。当然,这只是一个参考,具体还要根据软硬件的条件才能最终确定下来。

Tomcat进行调优后再用Jmeter进行测试

1、增加Tomcat对JVM内存的分配:即调整虚拟内存

Linux:

在/usr/local/tomcat_home/bin目录下的catalina.sh

添加:JAVA_OPTS=‘-Xms1024m -Xmx2048m‘

要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。

-Xms:初始值

-Xmx:最大值

-Xmn:最小值

Windows:

在catalina.bat最前面加入 
set JAVA_OPTS=-Xms1024m -Xmx2048m 
如果用startup.bat启动tomcat,OK设置生效。够成功的分配2048M内存. 
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms1024m -Xmx2048m没起作用。
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.。
解决办法:

修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat
Service Manager\Tomcat7\Parameters\JavaOptions 
原值为

-Dcatalina.home="C:\ApacheGroup\Tomcat
7.0.42"

-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat
7.0.42\common\endorsed"

-Xrs 
加入 -Xms1024m -Xmx2048m

重起tomcat服务,设置生效

2、修改线程池并将默认的8080端口修改为9999端口。

即将默认的

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

修改为:

<Connector port="9999" redirectPort="8443"    
   maxHttpHeaderSize="8192" useBodyEncodingForURI="true"    
   minProcessors="100" maxProcessors="5000"    
   maxThreads="5000" minSpareThreads="1000" maxSpareThreads="4000"    
   enableLookups="false" acceptCount="3500"    
   compression="on" compressionMinSize="2048"    
   compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"    
   connectionTimeout="60000" disableUploadTimeout="true" debug="0" URIEncoding="UTF-8"/>

3. 禁用DNS查询

当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭 DNS查询,方式是修改server.xml文件中的enableLookups参数值: 将其设置为false。

4、修改完后,重启tomcat。

5、在Jmeter的Thread Group中将上面的8080改成9999.

6、重新执行Jmeter,执行10分钟后,保存执行结果,得到如下的执行结果:

对比调优后的执行结果,发现Tomcat的吞吐率得到了相当的提升,平均执行时间大大减少了。

时间: 2024-10-12 18:26:50

使用JMeter对Tomcat进行压力测试与Tomcat性能调优的相关文章

Tomcat和Java Virtual Machine的性能调优总结

就算生不逢时,也该理解理解了.已经在Java界快混迹3年了,对于一些性能调优的话题我是一直插不上嘴,只是针对昨晚看到的一篇性能调优的文章,我忍不住了. Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧: 1.URIEncoding="U

【转】使用JMeter 完成常用的压力测试(二)

使用JMeter 完成常用的压力测试 Login.jsp 和welcome.jsp.其中 login.jsp 负责生成 User 对象,并调用 User 的login.当 login 返回为 true 时转向到 welcome.jsp.其验证部分的代码: <%   if( request.getParameter("Submit") != null) {  User ur= new User( request.getParameter("user"), req

jmeter 连接 mysql 进行压力测试

jmeter 连接 mysql 进行压力测试,布布扣,bubuko.com

jmeter 连接 sqlite 进行压力测试

jmeter 连接 sqlite 进行压力测试,布布扣,bubuko.com

学习总结——JMeter做http接口压力测试

JMeter做http接口压力测试 测前准备 用JMeter做接口的压测非常方便,在压测之前我们需要考虑这几个方面: 场景设定 场景分单场景和混合场景.针对一个接口做压力测试就是单场景,针对一个流程做压力测试的时候就是混合场景,需要多个接口共同作用. 压测时间设定 通常时间设为10 – 15 分钟,如果涉及疲劳测试的话时间可根据实际情况设定,1周,一个月不等. 测试数据准备 如果需要测试的数据量很大的话,需要造数据,造数据可以JMeter操作数据库来完成,也可以用Python造数据. 结果查看

转:使用 JMeter 完成常用的压力测试

使用 JMeter 完成常用的压力测试 就目前 Java EE 的平台下开发的软件来说,这种节点通常可能是:Web 服务器.数据库服务器和 JMS 服务器.它们都是请求主要发生的地点,请求频率较其它的节点要高,而且处于请求序列的关键路径之上.如果它们效率无法提高的话,对于整个软件的效率有致命的影响.而且在这些节点上一般都会发生较大规模的数据交换,有时其中还包含有业务逻辑处理,它们正是在进行压力测试时首先需要考虑的. 文中有例子 http://www.ibm.com/developerworks/

Tomcat(JVM)性能调优

Tomcat架构图 Tomcat与JVM版本优化Tomcat的运行是基于Java的虚拟机.SUN的JVM动态库有client和server两个版本,分别针对桌面应用和服务器应用做了相应的优化,client版本加载速度较快,server版本加载速度较慢但运行起来较快.在命令行输入 java -version 可以看到jvm目前配置的是哪个版本.如果要修改jvm的版本,可更改默认java.exe调用的jvm.dll,这个由jvm.cfg决定.编辑%JAVA_HOME%/jre/lib/i386/jv

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

http://blog.csdn.net/dracotianlong/article/details/8963594 Tomcat性能调优后, 启动出现警告问题 [did not find a matching property.] 2013-05-23 09:40 33522人阅读 评论(3) 收藏 举报  分类: Tomcat(11)  版权声明:本文为博主原创文章,未经博主允许不得转载. 2013-5-22 16:29:48 org.apache.catalina.core.AprLife

tomcat中使用apr及性能调优

tomcat8使用apr及性能调优本次安装的软件包括:jdk1.7.0_79apache-tomcat-8.0.0-RC1.tar.gzapr-1.5.2.tar.gzapr-iconv-1.2.1.tar.gzapr-util-1.5.4.tar.gztomcat-native-1.1.33-src.tar.gz 1)安装jdk1.7cd /usr/local/src rpm -ivh jdk-7u79-linux-i586.rpm ln -s jdk1.7.0_79 jdk1.7 2)安装t