websocket 长连接数、 websocket压力测试
- JMeterPlugins-Standard
- serverAgent
JMeter webscoket 分布式压力测试
- master:司令
- slave(server):奴隶
- target:目标
Jmeter分布式压测原理
- 总控机器的节点master,其他产生压力的机器叫“肉鸡” server
- master会把压测脚本发送到 server上面
- 执行的时候,server上只需要把jmeter-server打开就可以了,不用启动jmeter
- 结束后,server会把压测数据回传给master,然后master汇总输出报告
- 在master和slaves机器上分别按照相同版本的jdk和jmeter
- 在master机器上
1) 修改配置文件,进入jmeter/bin目录下
vim jmeter.properties
remote_hosts=192.168.0.102:8899,192.168.0.101:8899(slaves机器的ip和端口)
server.rmi.ssl.disable=true(禁用ssl)
如果master即作为master也作为slaves
remote_hosts=192.168.0.102:8899,192.168.0.101:8899,master的ip:8899
server_port=8899
server.rmi.ssl.disable=true(禁用ssl)
2) 启动jmeter服务
./jmeter-server(linux)
jmeter-server.bat(windows)
3) 检查是否启动成功
ps -ef|grep jmeter-server
- 在slaves机器上
1) 修改配置文件,进入jmeter/bin目录下
vim jmeter.properties
remote_hosts=127.0.0.1
server_port=8899
server.rmi.ssl.disable=true(禁用ssl)
2) 启动jmeter服务
./jmeter-server(linux)
jmeter-server.bat(windows)
3) 检查是否启动成功
ps -ef|grep jmeter-server
- 分布式执行
GUI模式 :运行——》远程启动、远程启动全部
non-GUO模式:命令行增加-r参数
jmeter -n -t /Users/jack/Desktop/remote.jmx -r -l /Users/jack/Desktop/jtl/result.jtl -e -o /Users/jack/Desktop/result
JMeter分布式部署遇到的报错问题
Error in rconfigure() method java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: eu.luminis.jmeter.wssampler.OpenWebSocketSampler (no security manager: RMI class loader disabled)
- 情况1
自己配置上禁用ssl了 - 情况2
控制机器和被控制机器插件、或jmeter版本不一致.
Connection refused to host: 192.168.3.156; nested exception is:
java.net.ConnectException: Connection refused: connect
奴隶机器启动防火墙了-关闭就好了
non-JRMP server at remote endpoint
端口被占用了 windows netstat -ano | findstr "1099"
error during JRMP connection establishment; nested exception is:
javax.net.ssl.SSLHandshakeException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed
生成的SSL文件不一致
Found ApacheJMeter_core.jar
Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
An error occurred: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
errorlevel=1
需要配置环境变量 %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;
Exception creating connection to: 192.168.3.156; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
java.io.IOException: java.security.UnrecoverableKeyException: Cannot recover key
An error occurred: Listen failed on port: 0; nested exception is:
java.io.IOException: java.security.UnrecoverableKeyException: Cannot recover key
errorlevel=1
Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
java.io.IOException: Keystore was tampered with, or password was incorrect
An error occurred: Listen failed on port: 0; nested exception is:
java.io.IOException: Keystore was tampered with, or password was incorrect
errorlevel=1
python websocket 压力测试
import websocket
import time
import threading
SERVER_URL = "ws://192.168.3.51:9501/"
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
def send_trhead():
send_info = 'PING'
while True:
time.sleep(5)
ws.send('PING')
t = threading.Thread(target=send_trhead)
t.start()
def on_start(a):
time.sleep(a%20)
websocket.enableTrace(True)
ws = websocket.WebSocketApp(SERVER_URL + str(a),
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.on_open = on_open
ws.run_forever()
from threadpool import ThreadPool, makeRequests
if __name__ == "__main__":
#init_logging()
pool = ThreadPool(20000)
test = list()
for ir in range(20000):
test.append(ir)
requests = makeRequests(on_start, test)
[pool.putRequest(req) for req in requests]
pool.wait()
相关资料
WebSocket进行压力测试
jmeter分布式压测—-windows
ServerAgent-2.2.3
Jmeter分布式压测和监控实践
JMeter安装
Jmeter 安装 (win10 下)
Jmeter的下载安装和环境变量配置(Windows10系统)
JMeter分布式部署
Jmeter分布式的坑
Jmeter分布式测试的各种坑之jmeter-server修改ip
JMeter 4使用SSL密钥库在云中进行远程测试 已创建rmi_keystore.jks,请将其master复制到slave的bin目录中。之后你可以重启jmeter-server.bat奴隶
基于JMeter进行分布式测试
传输机制将使用SSL
server.rmi.ssl.disable=true