使用 Jmeter 对 Java web 执行负载

使用 Jmeter 对 Java web 执行负载

一.JMeter介绍

1.Apache JMeter是什么

Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量。它最初被设计用于Web应用测试但后来扩展到其它测试领域。Apache JMeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java对象,数据库和查询,FTP服务器或是其它资源)的性能进行测试。JMeter可以用于在服务器,网络或对象模拟繁重的负载来测试它们提供服务的受压能力或者分析不同压力条件下的总体性能情况。你可以使用JMeter提供的图形化界面,分析性能指标或者在高负载情况下测试你的服务器/脚本/对象。

2.Apache JMeter能做什么

1.能够对HTTP和FTP服务器进行压力和性能测试,也可以对任何数据库进行同样的测试

2.完全的可移植性和100%纯Java

3.完全Swing的轻量级组件支持

4.完全多线程框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样

5.精心的GUI设计允许快速操作和更精确的计时

6.缓存和离线分析/回放测试结果

7.高可扩展性:

可链接的取样器允许无限制的测试能力

各种负载统计表和可链接的计时器可供选择

数据分析和可视化插件提供了很好的可扩展性以及个性化

具有提供动态输入到测试的功能

支持脚本变成的取样器

二.JMeter安装

1.安装环境

1.操作系统:window  xp  7  8

2.安装包准备:

最新的JMeter下载地址

http://apache.dataguru.cn//JMeter/binaries/apache-JMeter-2.13.tgz

Jdk根据不同的操作系统选择jdk版本

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

3.安装JMeter,解压“jakarta-JMeter-2.13.zip”到E盘根目录下:“E:/jakarta-JMeter-2.13”

<1>在环境变量里面新建一个:
变量名:JMETER_HOME
变量值:D:\apache-jmeter-3.1

<2>在CLASSPATH里面加:
;%JMETER_HOME%/lib/ext/ApacheJMeter_core.jar;%JMETER_HOME%/lib/jorphan.jar;%JMETER_HOME%/lib/logkit-2.0.jar

4.运行JMeter: 直接打开 E:/jakarta-JMeter-2.13/bin/JMeter.bat 即可

若有两个弹出框,其中一个是jmeter的图形界面,安装成功

4).建立测试计划
测试计划由一系列测试组件组成,这些组件决定如何模拟负载测试。我们将解释在我们的测试计划中如何使用这些组件。

添加一个线程组
首先,添加一个线程组来测试计划:
1.右键单击测试计划
2.鼠标添加
3.鼠标/线程(用户)
4.点击线程组
线程组有三个特别重要的属性影响负载测试:
1.线程数(用户):JMeter试图模拟的用户数量。设置这个50
2.加速周期(以秒为单位):JMeter将会将线程的启动分配到线程的持续时间。设置为10。
3.循环计数:执行测试的次数。把这个设置为1。

添加HTTP请求默认值
HTTP请求默认配置元素用于为测试计划中的HTTP请求设置默认值。如果我们想要将多个HTTP请求发送到相同的服务器,作为测试的一部分,这一点特别有用。现在让我们添加HTTP请求默认为线程组:
1选择Thread Group,然后右键单击它
2鼠标添加
3鼠标/Sampler
4单击HTTP请求默认值
在HTTP请求默认情况下,在Web服务器部分中,将服务器名或IP字段填入您想要测试的Web服务器的名称或IP地址。在这里设置服务器使它成为该线程组中其余项的默认服务器。

在表侦听器中添加视图结果
在JMeter中,侦听器用于输出负载测试的结果。有很多可用的侦听器,可以通过安装插件来添加其他侦听器。我们将使用该表,因为它易于阅读。
1选择Thread Group,然后右键单击它
2鼠标添加
3鼠标侦听器
4单击表中的视图结果

5).查看测试结果
运行基本测试计划
现在我们已经建立了基本的测试计划,让我们运行它并查看结果。
首先,通过单击文件保存测试计划,然后保存,然后指定所需的文件名。然后在左侧窗格中选择查看结果,然后从主菜单单击Run,然后单击Start(或者单击主菜单下面的绿色Start箭头)。应该看到测试结果在表中作为测试运行:

结果
您可能会看到所有请求的状态都是“成功”(由绿色三角形表示,其中有一个复选标记)。在此之后,您可能最感兴趣的列是示例时间(ms)和延迟(在示例中没有显示)。
延迟:在JMeter发送请求和收到初始响应时之间的毫秒数
示例时间:服务器完全服务于请求(响应+延迟)的毫秒数
样本数目:是指在测试过程中,总共想服务器发出的请求数目。成功的情况下等于你设定的并发数目×循环次数
最新样本:他是代表时间的,表示服务器响应最后一个请求的时间。
吞吐量 : 表示服务器每分钟处理的请求数目。
平均值 : 总的运行时间除以发送到服务器的请求数目;
偏离 : 服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。
中值 : 时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。

6).与测试服务器结合分析
ssh登录到服务器上去看看cpu和内存的使用情况

参数说明
Cpu:
us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
Men:内存
total — 物理内存总量
used — 使用中的内存总量
free — 空闲内存总量
buffers — 缓存的内存量

除非您有用户积极地攻击您的服务器,否则您应该看到Cpu(s)%用户使用量(us)应该非常低或0%,并且Cpu(s)%空闲(id)应该是99% +,这样: 现在,在JMeter中,再次启动测试,然后切换回web服务器的SSH会话。您应该看到资源使用量的增加,一开始用50个线程,平均请求时间是0.3s,cpu2%,增加负载,让我们在10秒内用80个线程尝试相同的测试。在左窗格中的线程组项中,将线程(用户)的数量更改为100。现在单击表中的视图结果,然后再运行测试100个是2s, cpu13%,200个9s,cpu 28%,500个19秒,cpu53%,到1000个时,cpu98%。。。bome!测试服务器崩了。其实我这种增加线程太多,应该慢慢加,幅度不要太大,慢慢测出在需要的请求时间内的最大的线程数

7).结论
<1>JMeter可以成为确定如何改进web应用程序服务器设置的非常有价值的工具,以减少瓶颈和提高性能。既然您已经熟悉了JMeter的基本用法,您可以创建新的测试计划来度量各种场景中服务器的性能。
我们所使用的测试示例并不能准确地反映一个普通用户的使用模式,但是JMeter有一些工具来执行各种测试,这些测试在您的环境中可能是有用的。例如,JMeter可以配置为模拟用户登录到您的应用程序、客户端缓存,以及通过URL重写处理用户会话。还有许多其他内置的samplers、侦听器和配置工具可以帮助您构建所需的场景。此外,还有JMeter插件来增强其功能,可在http://jmeter plugins.org/上下载。
<2>在计算机世界里面,时间可空间永远是不可调和的矛盾!cpu用的多,计算的越快,内存耗得越大,我上面的测试例子内存是不考虑的,大部分情况下,cpu是性能的短板。

发表评论

电子邮件地址不会被公开。 必填项已用*标注