使用 JMeter 分布式性能测试

作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter 也可以像 LoadRunner 一样通过使用多台机器运行所谓的 Agent 来分担 Load Generator 自身的压力,并借此来获取更大的并发用户数。根据 JMeter官方文档的署名,你需要自己完成这个配置,不过不用担心,这将非常简单 ^_^

  1. 在所有期望运行 JMeter 作为 Load Generator 的机器上安装 JMeter,并确定其中一台机器作为 Controller,其他的机器作为 Agent。然后运行所有 Agent 机器上的JMeter-server.bat文件------假定我们使用两台机器 192.168.0.1 和 192.168.0.2 作为 Agent;

  2. 在Controller 机器的 JMeter 安装目录下找到 bin 目录,再找到 JMeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;

  3. 在打开的文件中查找"remote_hosts="这个字符串,你可以找到这样一行"remote_hosts=127.0.0.1"。其中的 127.0..0.1 表示运行 JMeter Agent 的机器,这里需要修改为"remote_hosts=192.168.0.1:1664,192.168.0.2:1664"------其中的 1664 为 JMeter 的 Controller 和 Agent 之间进行通讯的默认 RMI 端口号;

  4. 保存文件,并重新启动 Controller 机器上的 JMeter.bat,并进入 Run -> Remote Start 菜单项。看到啥了?^_^

使用命令行方式运行 JMeter 脚本

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 2.4.3 Non-GUI Mode (Command Line mode) |
| For non-interactive testing, you may choose to run JMeterwithout the GUI. To do so, use the following command options -n This specifies JMeteris to run in non-gui mode -t [name of JMX file that contains the Test Plan]. -l [name of JTL file to log sample results to]. -r Run all remote servers specified in JMeter.properties (or remote servers specified on command line by overriding properties) The script also lets you specify the optional firewall/proxy server information: -H [proxy server hostname or ip address] -P [proxy server port] Example : JMeter-n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000 |

上面这段说明来自 JMeter 的官方用户手册。其中提到了使用命令行方式运行 JMeter 脚本的方法。只有几个简单的参数,很直观,用起来也很方便。好处是可以节省一些系统资源。

今天尝试 300 个虚拟用户连续运行 5 分钟时------使用 GUI 方式,发现开始运行后不久 UI 就失去了响应,并提示一个有关 AWT 的错误,最终只能把 Java 进程结束掉。但是使用命令行方式时却很稳定。

不过当在命令行方式下尝试 500 个虚拟用户连续运行 5 分钟时,JMeter 抛出了一个 Out of Memory 的异常并退出了进程。

Note:

1.执行命令前要检查当前目录是否是 %JMeter_Home%\bin 目录;

2.如果 JMeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。

JMeter 的手册中描述了如何访问 MySQL,但是没有说明如何访问 Oracle。对于没有 Java 应用开发经验和对 Oracle 不是特别熟悉的朋友,可以参考这篇文章来简单、快速的配置好 JMeter 中的 JDBC 连接和 JDBC Request。

步骤:

  1. 新建一个 Thread Group;
  2. 新增 JDBC Connection Configuration;
  3. 点击新增的 JDBC Connection Configuration ,需要修改的参数包括:
  • Variable Name:可以先填一个 Oracle,等会解释;
  • Database URL:jdbc:oracle:thin:@{host_IP_or_machine_name}:{Oracle 监听器监听的端口}:{你的Oracle实例的名字} ------大家要注意,"{ }" 大括号 只是我用来说明用的,在配置 JMeter 时,请将 "{ }" 大括号去掉 ^_^
  • JDBC Driver class:oracle.jdbc.driver.OracleDriver
  • Username:访问上面Oracle实例的用户名
  • Password:对应的密码
  1. 新增一个 JDBC Request,需要修改的参数包括:
  • Variable Name:和上面的 JDBC Connection Configuration填写同样的内容。这里表示 JDBC Connection Configuration建立一个名为Oracle 的连接池,之后其它的JDBC Request都共用这个连接池;
  • Query:select * from table_name 。 这里建议打开你的数据查询工具,输入一条SQL查询语句,保证可以执行看到结果的,然后copy 过来;
  1. 新增一个View Results Tree;
  2. 点击 Run,查看结果。可以在Response data tab 看到响应的返回结果。

注意事项:

  1. 执行时提示:No Suitable Driver。

在电脑上搜索一下 classes12.jar 这个文件,然后copy到JMeter的Lib目录下。如果找不到classes12.jar这个文件,就找找classes12.zip文件,然后把扩展名改为jar;

  1. 执行时提示:ORA-00911: invalid character。

确保你在JDBC Request里面的Query中输入的SQL语句是正确的。

JMeter 用户手册中关于配置通过JDBC对数据库性能进行测试的部分如下:

Apache JMeter - User's Manual: Building a Simple Database Test Plan

另外,我做了两个 Test Plan,一个是 for Oracle 的,一个是 for MySQL 的,你可以点击下面的链接下载。

JMeter Test Plan for Oracle

JMeter Test Plan for MySQL

MySQL JDBC Driver (下载后需要自己把扩展名改为 .jar 然后放到 JMeter 的 lib 目录下)

相关推荐
龙哥·三年风水3 小时前
workman服务端开发模式-应用开发-vue-element-admin挂载websocket
分布式·websocket·vue
明达技术3 小时前
分布式 I/O 配合高冗余 PLC,打造高效控制新典范
运维·分布式
技术路上的苦行僧3 小时前
分布式专题(9)之Mysql高可用方案
分布式·mysql·mgr·mha·mysql高可用·mmm
Lin_Miao_094 小时前
Kafka优势
分布式·kafka
小陈far4 小时前
RabbitMQ
分布式·rabbitmq
樊梓慕5 小时前
负载均衡式在线OJ系统测试报告(Jmeter性能测试、Selenium自动化测试脚本)
功能测试·selenium·测试工具·jmeter
zhangpfly6 小时前
OpenEuler22.04配置zookeeper+kafka三节点集群
分布式·zookeeper·kafka
员宇宙8 小时前
【RabbitMQ的死信队列】
分布式·rabbitmq·ruby
Allen Bright9 小时前
RabbitMQ中的批量Confirm模式:提升消息可靠性与性能
分布式·rabbitmq
bennybi10 小时前
基于Docker的ETCD分布式集群
分布式·docker·etcd