Jmeter是Apache基金会旗下的一款免费,开源,轻量级的性能测试工具,主要针对web应用程序客户端/服务器进行性能测试.它可以分别测试静态、动态资源(Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等),它可以通过线程组来模拟数个用户,在一段时间内同时登录服务器,数个用户并发对数据库进行访问,从而测试出服务器,数据库在一定负载情况下的性能状况
Jmeter是基于Java语言开发的,所以它的运行依赖于Jre环境,在运行之前首先要下载jdk(最好下载8,太低的话会导致无法启动).配置好环境变量后,下载Jmeter(下载地址 Apache JMeter - Download Apache JMeter ),截止发文前最高版本为5.4.3,我这里使用3.0演示.
Jmeter文件(下载地址(链接:https://pan.baidu.com/s/1Rr3ZQ8gaawBRPUctkuWBxw
提取码:1304,有效期30天)(JMeterPlugins-Extras.jar,JMeterPlugins-Standard.jar这两个包是针对客户端安装的.ServerAgent-是针对服务器端的)
1. Jmeter本身并没有提供对服务器CPU,Memory,Disks I/O等进行监控的功能,所以我们通过它的插件来完成. 上面文件下载后,把JMeterPlugins-Extras.jar,JMeterPlugins-Standard.jar两个包放到Jmeter安装目录下的\lib\ext下,然后去bin目录下双击 jmeter.bat文件运行. 右击 测试计划>>Add>>Threads(Users),当发现有jp@gc-开头的选项时即表示插件安装成功
2. 右击 测试计划>>Add>>Threads(Users)>>Thread Group,添加线程组.右键 Thread group>>Add>>Sampler>>HTTP Request 添加Http请求,这里不设置参数值.而后 右键HTTP Request>>Add>>Listener>>jp@gc-PerfMon Metrics Collector.添加服务器端监控
3. 这样客户端就配置好了,接下来配置服务端,连接工具连接服务器,把ServerAgent-2.2.3.zip上传到服务器,解压,把压缩包删除.进入ServerAgent-2.2.3下, 用命令 chmod 777 startAgent.sh 赋予其全部权限. ./startAgent.sh 运行.出现以下提示,即代表运行成功.(ServerAgent默认使用4444端口)
如果出现 Can't accept UDP connections等错误提示, 可能是你的4444端口被占用了,用命令 lsof -i:4444检测, 如果有程序占用,用 kill -9 pid 把它杀掉,再启动就行了
5. 启动成功后,可以用windows的DOS命令连接检测一下, telnet 服务器IP 4444
如果连接不成功,主要有两个原因,一是你的telnet客户端或者服务没有启动,具体启动方法百度.二是你服务器端的防火墙端口没有开启,开启方法自行百度.
服务器端出现以下提示即代表连接成功
6. 连接成功后我们就可以在Jmeter上开始进行测试.点击 jp@gc-PerfMon Metrics Collector,在Servers Monitor中点击Add Row,添加服务器IP和端口号,Metric to collect下选择CPU/Memory/Disks I/O.然后设置线程组执行次数和循环次数,这里我设置执行1000次,循环10次,100秒内执行完
7. 点运行按钮,Chart中出现以下画面即代表监控成功
从画面中我们看出服务器CPU,内存,磁盘的运行状况,CPU和磁盘曲线在正常范围内波动,表示CPU、磁盘相对趋于稳定,内存曲线无波动一直处于一个稳定的值,表示内存也趋于稳定.
8 .这种监控一般配合web服务器来一起测试,访问web,监控服务器,这样才有实际的意义.我已经预装了Tomcat,这里我们以Tomcat为例来进行.首先保证tomcat能正常访问.然后在HTTP Request中添加以下参数.
9. 点击运行,然后观察曲线变化
从图中我们看出各性能曲线都趋于正常,相对我们直接监控服务器CPU和磁盘更加稳定了.这是由于云服务器的保护机制,像云服务器的大型厂商,阿里、腾讯、华为,都针对各家的云服务器开发有保护技术,我这里监控的是阿里云服务器,当我再次运行后去服务端用 top命令观察cpu的状况,看到Java服务在首行,其次有一个AliyunDun的服务. 查阅官网得知,阿里云盾是针对阿里云服务器的一项保护技术,它可以过滤掉90%的异常访问包括一些DOS攻击,从而达到保护服务器的目的。
接下来我们测试数据库的性能(以mysql为例)
1. 这里我们着重于数据库的性能,不考虑网速的影响,所以我们采用本地的数据库(我安装的是Mysql8.0),打开Jmeter,添加线程组,右键 线程组>> Config Element >> JDBC Connection Configuration 添加JDBC配置, Variable Name处填写一个变量名 mysql (注意,自己起的名字要记住,后面要引用),在Database Connection Configuration处分别输入以下数据
Database URL是你的数据库连接地址,JDBC Driver class是加载的驱动类(如果你驱动包是5以上的版本,驱动类为com.mysql.cj.jdbc.Driver),Username是你的数据库用户名,Password是密码.
2. 右键线程组 >> Sampler >> JDBC Request 添加JDBC请求, Variable Name 后填写mysql(这里引用的是 JDBC Connection Configuration中的Variable Name ).Query Type 后选择 Select Statement,这里我们主要测试对数据库的查询,在实际开发中查询也是首要的测试点,Query下输入sql语句, 可以联查多张表.
3. 以上步骤完成后,对数据库的测试配置就完成了,最后添加察看结果树(View Results Tree),聚合报告(Aggregate Report)。在执行之前还需要把JDBC的连接jar包引入进来.点击测试计划,在最下面Add directory or jar to calsspath处点击 Browser,然后选择你本地的jar包 确定
4. 选择线程组,设置执行次数100,循环次数10,执行时间100秒.点击运行. 点击 Aggregate Report查看
从上图看出,测试执行了1000次,平均响应时间2毫秒,无出错率,1秒内的吞吐量为10,趋于稳定.
各参数的解释如下 ,响应时间,出错率,吞吐量,最小响应,最大响应是测试的几个重要参数指标.
5. 最后一步,导出聚合报告数据. 点击底部的 Save Table Data,选择存放位置,会导出一个.CSV的Excel文件.
除此之外还可以通过Jmeter的非GUI运行方式导出
至此,我们已完成了对服务器、数据库的压测,从而得出了测试数据.通过对测试数据的分析可以帮助我们在服务器配置参数和数据库参数配置方面进行调优,从而使其达到一个最佳的性能状态