JMeter压测环境准备

JMeter是Java编写的多线程压测工具,测试HTTP请求时是“同步”机制,单台JMeter打压性能较一般。所以一般用分布式来打压较高的压力,所以会用多台Slave,有时需要在多台Slave之间共用各种文件,如共用jar包、数据文件等,常用NFS挂盘的形式来达到这个目的。以下为这种压测环境准备工作做个说明。

前置条件

  • 所有Master和Slave的Java版本要一致
  • 所有Master和Slave的JMeter版本要一致
  • 所有Master和Slave最好在同一个网段上并相互可访问

配置NFS

性能环境中的172.19.98.200已经是NFS Server了,所以建立/pang目录,用它做为JMeter Slave共用信息的根目录。然后面其下分别建立几个子目录:

  • jmeter_datafiles: 在它下面将放整个测试过程中使用的数据文件
  • jmeter_lib: 在它下面将放JMeter需要的公用jar包,例如oracle的驱动
  • jmeter_lib_ext: 在它下面将JMeter需要用的第三方或自已编写的Plugin
  • jmeter_props: 在它下面将放JMeter自已的配置文件
  • jmeter_jks: 在它下面将放client和server共用的证书文件

JMeter公用jar包和Plugin的放置路径规则,请参考JMeter文档
如果挂载时,出现访问权限问题,可以在98.200机器上检查/etc/exports文件,如果修改后用exportfs命令生效。

挂载目录

在所有的JMeter Salve机器上挂载这些目录:

[root@226  jmeter]# mount -t nfs -o rw,sync,noatime 172.19.98.200:/pang/jmeter_lib_ext /home/jmeter/jmeter_lib_ext
[root@226  jmeter]# mount -t nfs -o rw,sync,noatime 172.19.98.200:/pang/jmeter_lib /home/jmeter/jmeter_lib
[root@226  jmeter]# mount -t nfs -o rw,sync,noatime 172.19.98.200:/pang/jmeter_props/ /home/jmeter/jmeter_props
[root@226  jmeter]# mount -t nfs -o rw,sync,noatime 172.19.98.200:/pang/jmeter_datafiles /home/jmeter/jmeter_datafiles
[root@226  jmeter]# mount -t nfs -o rw,sync,noatime 172.19.98.200:/pang/jmeter_jks/ /home/jmeter/jmeter_jks

centos 7机器,需要先替换mount命令:yum install nfs-utils

共用密钥

在某一台Slave的bin目录下运行 create-rmi-keystore.sh

[root@lin-19-98-65  bin]# ./create-rmi-keystore.sh
What is your first and last name?
[Unknown]:  rmi
What is the name of your organizational unit?
[Unknown]:  test
What is the name of your organization?
[Unknown]:  ofpay
What is the name of your City or Locality?
[Unknown]:  nj
What is the name of your State or Province?
[Unknown]:  js
What is the two-letter country code for this unit?
[Unknown]:  CN
Is CN=rmi, OU=test, O=ofpay, L=nj, ST=js, C=CN correct?
[no]:  yes
Enter key password for
(RETURN if same as keystore password):
Copy the generated rmi_keystore.jks to jmeter/bin folder or reference it in property 'server.rmi.ssl.keystore.file'

把生成的密钥文件 rmi_keystore.jks (七天期限的证书,过期需重新生成)放到 /home/jmeter/jmeter_jks 中,要注意所有的Slave和Master机器都要共用同一个密钥文件。

在所有JMeter Slave的bin目录下,先删掉原有的证书文件,再:

[root@226  jmeter]# ln -s /home/jmeter/jmeter_jks/rmi_keystore.jks .

共用文件

在所有JMeter Slave的bin目录下,先删掉原有的*.properties文件,再:

[root@226  jmeter]# ln -s /home/jmeter/jmeter_props/*.properties .

同样,其它共用的jar包或数据库文件,都可以用类似的方法放在相应挂载的目录下。另外,数据文件在脚本中要写挂载的路径。

关闭防火墙

在所有的Slave机器上关闭防火墙:

[root@226  jmeter]# service firewalld stop
或者
[root@226  jmeter]# service iptables stop

执行

在各Slave上的JMeter的bin文件夹中执行:

HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" ./jmeter-server -Djava.rmi.server.hostname=hostname -I | cut -f1 -d ' '

在Master中执行:

JVM_ARGS="-Duser.language=en -Duser.region=EN -Djava.rmi.server.hostname=172.19.105.138" /Users/pangdinghai/bin/jmeter/bin/jmeter -j /tmp/jmeter.log

其中java.rmi.server.hostname的ip换成你自已的Master机器的ip地址。

其它

从上面步骤能看出,如果Slave机器较多的话,需要操作的步骤是比较繁琐的,如果Salve机器在10台以内,可以用tmux这个神器的synchronize-panes机制来操作,只需要把所有Slave机器放在一个window的不同panel中,然后再作类似如下绑定:

# send command to all panel
bind C-x setw synchronize-panes on
bind M-x setw synchronize-panes off

这样只在一个机器上敲命令,就可以同步到所有机器上去。而且能在一个地方集中操作和观察所有的Slave运行情况。如果机器更多,那可以考虑用ansible写Playbooks。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。