背景
- fabric 框架源码改完了之后需要测试性能,然后发现怎么也无法打满cpu,所以只能多来几台服务器,多跑几个jmeter了
使用方式:
docker pull jokerlvccc/bench-jmeter:1.0.0
docker tag jokerlvccc/bench-jmeter:1.0.0 bidsun.com/bench-jmeter:1.0.0
- 需要将自己的计划文件映射到 : /home/services/bidsun/bench/bashes/
- 如
-v /Users/joker/company/go/src/github.com/hyperledger/fabric-demo/bashes/test:/home/services/bidsun/bench/bashes/plans/
,会自动执行一系列任务,然后会自动导出结果,在同级目录下,不会重复执行(简单的通过jtl判断)
- 直接压测:
docker run -it --name jmeter -p 1099:1099 -p 50000:50000 -e ENV_ARGUMENT="bench " -v /Users/joker/company/go/src/github.com/hyperledger/fabric-demo/bashes/test:/home/services/bidsun/bench/bashes/ bidsun.com/bench-jmeter:1.0.0
- 只是作为agent:
docker run -it --name jmeter -p 1099:1099 -p 50000:50000 -e ENV_HOST="172.224.2.2" -e ENV_ARGUMENT="agent" bidsun.com/bench-jmeter:1.0.0
- 分布式压测
- 先在几个服务器上启动agent (如上启动n个agent)
- 然后在master上启动如下:
docker run -it --name jmeter-master -e ENV_ARGUMENT="bench" -e ENV_REMOTE_SERVERS="xxxx需要为agent的ip,默认端口1099可以不写" -v /Users/joker/company/go/src/github.com/hyperledger/fabric-demo/bashes/test:/home/services/bidsun/bench/bashes/ bidsun.com/bench-jmeter:1.0.0
遇到的问题
- connection refused
- 因为我是在本机执行,slave 和master在一台机器,刚开始没发现这个问题,后来丢到了服务器,遇到了这个问题,原因在于, 有一个localPort
- 当没有指定 port的时候,是随机的,因为是本机,docker之间没有隔离的话,也是都能访问的,所以没这个问题,但是到了服务器上之后,随机端口没有映射出来,所以会报connection refused
The following remote engines have not started:[xxx.xxx.xx.xx]
- 这个问题是因为访问不到,最开始我是直接通过:-Djava.rmi.server.hostname=
ifconfig eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
指定的,这时候的ip会是容器ip,而其他服务器是无法访问到的,然后基于现在docker还不支持容器内获取宿主机ip,所以干脆传入一个ENV_HOST环境变量解决
注意点
- 必须外抛 server_port (默认是1099)和server_local_port(50000),否则的话无法其他服务器无法识别到