使用 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 JMeter without the GUI. To do so, use the following command options

-n This specifies JMeter is 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;

     2. 执行时提示: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 目录下)

你可能感兴趣的:(测试,jmeter,分布式)