我们使用 JMeter 进行性能测试时,经常遇到 JMeter 假死的情况。一般有两个原因:一是 JMeter 原本是Java写的,heap受硬件限制需要调优,二是单机无法分解超大并发比如100万+并发压测。因此,我们分二部走,首先我们需要进行jmeter分布式部署和调配,二是我们需要对每台执行机进行深度 JMeter JVM 调优,掠尽所有执行及的硬件和网络资源。
下图为 JMeter 的原理图,Controller 可以 GUI 模式运行,也可以非 GUI 模式运行。
PS:JMeter 分布式测试注意事项:
这是首要条件,JMeter 的 Controller 与 Slave 之间的连接也是通过网络通信连接起来的。如果网络通信不同,怎么连接、怎么配置都会失败,搞得你一脸懵逼。
方法:ping 一下对方的 IP 地址,看是否连通。如果连通,如下所示
如果出现以下内容,说明单方向是不连通的。
连接不同解决办法:
4.0版本官方帮助文档有以下这句话:
在4.0以后的版本,需要先设置 keystore 才能正常进行分布式测试,不然会报以下错误:
在 Controller 的 JMETER_HOME/bin/ 路径,Windows 系统运行 create-rmi-keystore.bat ,Unix 系统(包含 Linux,macOS)运行 create-rmi-keystore.sh 。
当您运行该脚本时,它将询问您一些关于它将嵌入到证书中的一些名称的问题。您可以输入任何您想要的内容,只要keystore工具能接受它。第一个问题输入的值必须与属性server.rmi.ssl.keystore匹配,默认为rmi。创建 keystore 的示例如下所示。
以上步骤完成后,将 rmi_keystore.jks 复制到所有 Slave 的 JMETER_HOME/bin/ 路径。
Controller 和 Slave 的机器配置好了。先在 Slave 启动 jmeter-server 脚本,WIndows 系统运行 JMETER_HOME/bin/jmeter-server.bat ,Unix 系统运行 JMETER_HOME/bin/jmeter-server ;Controller 启动 jmeter 脚本,WIndows 系统运行 JMETER_HOME/bin/jmeter.bat ,Unix 系统运行 JMETER_HOME/bin/jmeter.sh 。
运行 jmeter-server,添加hostname。直接运行成功:
启动所有 Slave 机命令:
启动指定 Slave 机命令:
启动 JMeter 的 UI 界面后,下图是让指定远程端执行测试。选择 Remote Start All 是启动所有远程端执行测试。Controller 本身不执行测试操作。
Configuring remote engine: 132.16.17.58:2099
error during JRMP connection establishment; nested exception is:
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Failed to configure 132.16.17.58:2099
Stopping remote engines
Remote engines have been stopped
Error in NonGUIDriver java.lang.RuntimeException: Following remote engines could not be configured:[132.16.17.58:2099]
```