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

标签: jmeter tomcat 压力测试 | 发表时间:2014-12-08 00:14 | 作者:
出处:http://www.iteye.com

一、准备工作。

      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的吞吐率得到了相当的提升,平均执行时间大大减少了。

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [jmeter tomcat 压力测试] 推荐:

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

- - ITeye博客
      1、安装JDK1.6或1.6版本以后的,并配置环境变量. 这个exception的原因是 apache-jmeter-2.12_src.zip中的bin目录中,缺少了ApacheJemeter.jar.所以要下载binary版本的.      3、在Apache的官网上下载Tomcat,本文中以Tomcat7.0.42为例.

Jmeter教程 简单的压力测试

- - 行业应用 - ITeye博客
Jmeter是一个非常好用的压力测试工具.   Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好.     做压力测试的常用工具.     做压力测试的步骤如下:.     本文做压力测试的例子.     第一步: 使用CSV Data Set Config 来参数化.

JMeter随机对某一网点进行随机压力测试

- - 互联网 - ITeye博客
        Apache JMeter是Apache组织开发的基于Java的压力测试工具. 用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等. JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能.

JMeter 压力测试使用函数和 CSV 文件参数化 json 数据

- - CSDN博客架构设计推荐文章
        在 http Load Testing 中,json 数据的提交是个让人头疼的问题. 本文详细介绍如何进行 JMeter 的 json 测试提交,以及如何将其参数化.         Step 1 http json 请求采样器的录制.         这个工具很多,可以使用 JMeter 代理录制,也可以使用 Badboy.

linux、mysql、nginx、tomcat 环境下压力测试的主要调试参数

- - SegmentFault 最新的文章
一、linux 系统内核参数. /etc/sysctl.conf文件常用参数. net.core.netdev_max_backlog = 32768 #允许送到队列的数据包的最大数目 net.core.rmem_max = 8388608. #SOCKET读缓存区大小 net.core.wmem_max = 8388608.

JMETER 参数化

- - 开源软件 - ITeye博客
用Jmeter中的函数获取参数值,__Random,__threadNum,__CSVRead,__StringFromFile. 2.用户定义的变量 “配置元件”->“用户定义的变量”. 从csv文件中读取“配置元件”->“CSV Data Set Config”. 调用方法${id_g1} ${id_g2} ${id_g3}.

压力测试工具Benchmark

- - 企业架构 - ITeye博客
已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

JMeter使用技巧

- - 博客园_首页
在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享. 如何使用英文界面的jmeter. 如何使用英文界面的JMeter.   Jmeter启动时会自动判断操作系统的locale 并选择合适的语言启动,所以,我们启动jmeter后,其会出现一个倍感亲切的中文界面.

使用webbench做压力测试

- - 三水清
元旦假期帮朋友折腾VPS,安装了centOS和lnmp,网站部好了,而且定时任务也加上了,觉得应该做个压力测试,之前用过apache自带的ab,不过今天使用的是 webbench做压力测试. 首先我们先来安装webbench吧, 为了测试准确,请将 webbench 安装在别的linux服务器上, 因为webbench 做压力测试时,自身也会消耗CPU和内存资源, 否则, 很可能把自己服务器搞挂掉.

Mysql压力测试shell脚本

- - CSDN博客数据库推荐文章
转载请注明,来自: http://blog.csdn.net/skyman_2001. Mysql自带了压力测试工具mysqlslap,所以我们可以不用自己编写程序来测试Mysql读取的压力. 上面脚本的意思是每隔100ms循环做这样的事:模拟100个mysql客户端,对数据库test的表test执行200次插入(number-of-queries = concurrency * 每个mysql客户端的查询次数,所以这里的每个mysql客户端的查询次数是2次),迭代10次.