Jmeter分布式压测

Jmeter的集群模式可以让我们将多台机器联合起来一起产生负载,从而弥补单台机器负载生成能力不足的问题。

假设我们的测试计划会产生100个threads,我们使用6台机器进行分布式测试的时候,一共会产生100 * 6 = 600的负载。

日常情况,大部分的性能需求,单台压测机就可以抗住的。4C8G的window server机器,使用UI方式,最高压测过2000并发(RT 20ms以内),单机没什么问题(当然如果IO很高的话,注意压测机网卡可能会先出现瓶颈。)超过2000并发,可使用分布式。

一、注意事项

1、关闭防火墙,开放端口

2、所有机器最好都在同一个子网上。

选择和被测目标服务同网段的机器作为压测机,很多人都是直接在办公环境的自己机器上压测,这种压测很不稳定,时好时坏,如果你们没有做流量隔离,说不定你会把你们的办公环境压垮!

3、一定要用内网IP,不要用公网IP,用ping去检查。

4、确保所有系统上使用相同版本的jdk和jmeter,包括大版本和小版本。

可使用下面的命令,远程拷贝,确保所有机器的软件包相同

远程拷贝命令(内网地址):

scp -r /usr/local/software/jdk-8u141-linux-x64.tar.gz root@172.18.230.233:/usr/local/software

scp -r /usr/local/software/jmeter/apache-jmeter-4.0.tgz root@172.18.230.233:/usr/local/software/jmeter

5、禁用SSL

vim jmeter.properties

server.rmi.ssl.disable=true

二、专业名称

master:司令

slave:奴隶

target:目标

Jmeter分布式压测原理

1、总控机器的节点master,其他产生压力的机器叫“肉鸡” server

2、master会把压测脚本发送到 server上面

3、执行的时候,server上只需要把jmeter-server打开就可以了,不用启动jmeter

4、结束后,server会把压测数据回传给master,然后master汇总输出报告

三、压测步骤

1、在master和slaves机器上分别按照相同版本的jdk和jmeter

2、在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

3、在slaves机器上

1)修改配置文件,进入jmeter/bin目录下

vim jmeter.properties

remote_hosts=127.0.0.1server_port=8899

server.rmi.ssl.disable=true(禁用ssl)

2)启动jmeter服务

./jmeter-server(linux)

jmeter-server.bat(windows)

3)检查是否启动成功

ps -ef|grep jmeter-server

4、分布式执行

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

四、常见问题

安装常见问题

1、问题:java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known

[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server

Created remote object: UnicastServerRef2 [liveRef: [endpoint:[:39308](local),objID:[24e78a63:16243c70661:-7fff, 7492480871343944173]]]

Server failed to start: java.rmi.RemoteException: Cannot start. Unable to get local host IP address.; nested exception is:

java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known

An error occurred: Cannot start. Unable to get local host IP address.; nested exception is:

java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known

解决:

hostname 命令获取机器名称,追加一个映射 iZwz95j86y235aroi85ht0Z

vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

120.79.160.143 iZwz95j86y235aroi85ht0Z

windows用户 修改c:\windows\system32\drivers\etc\hosts文件,增加一条域名 与IP的映射

2、问题:rmi_keystore.jks (No such file or directory)

[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server

Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:

java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)

An error occurred: Listen failed on port: 0; nested exception is:

java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)

解决:

拥有RMI over SSL的有效密钥库,或者禁用了SSL。

jmeter.property里面 server.rmi.ssl.disable 改为 true,表示禁用


3、问题:Cannot start. userCenter is a loopback address.

[root@userCenter bin]# ./jmeter-server

Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.0.1:39687](local),objID:[-18db419a:167773db861:-7fff, -176377700206527642]]]

Server failed to start: java.rmi.RemoteException: Cannot start. userCenter is a loopback address.

An error occurred: Cannot start. userCenter is a loopback address.

解决:

执行时加上参数:

./jmeter-server -Djava.rmi.server.hostname=10.1.1.222

-D表示传入的是system.properties


4、问题:There is insufficient memory for the Java Runtime 

[root@iZ949uw2xehZ bin]# ./jmeter

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12)

# There is insufficient memory for the Java Runtime Environment to continue.

# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.

# An error report file with more information is saved as:

# /usr/local/jmeter/apache-jmeter-4.0/bin/hs_err_pid5855.log

解决:

编辑jmeter

搜索 : "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"

改变初始堆内存和最大堆内存,最大不超过PC的50%内存。


5、仅修改 server_port 即可,下面两者一样

server.rmi.localport=8899 表示slave server启动显示的端口

server_port=8899 表示master机器要远程连接的端口,即 remote_hosts=xxxx:8899


6、要在多网卡的服务器上开启RMI服务的话必须指定IP,使他们能够在同一个网段内。

需要以下几步(假定所有机器都在10.120.11.*网段,agent服务器为linux, controller服务器为windows):

1) 修改agent服务器,指定agent机器的IP

修改jmeter-server文件

# vi jmeter-server

修改RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx(需要连接的IP)

2)修改server服务器,指定server机器的IP

修改jmeter.bat文件

新增set rmi_host=-Djava.rmi.server.hostname=10.120.11.214

修改set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%


7、确定在controller机器上安装jdk,版本和jmeter一致,配置环境变量:Java_home等

在Agent机器上安装jdk,配置环境变量:Java_home和JMeter_home

安装目录不要带空格,最好都是简短的英文路径


8、master机器启动后会拷贝jmx文件到slave机器,所以不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可。

如果使用csv进行参数化,则需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

总样本数 = 线程数 * 循环次数 * 执行机总数


9、连接失败原因排查

以下步骤进行排查:

1. jmeter-server是否启动;

2. 是否联网

3. ping 服务器IP是否畅通.

4. telnet 端口 192.168.3.10 1099

5. 检查服务器的防火墙是否关闭。

6. 阿里云安全策略是否正常


10、"could not find ApacheJmeter_core.jar"

解决:在Agent机器安装jdk,并设置环境变量


11、”Bad call to remote host"

解决:检查被控制机器上的jmeter-server有没有启动,或者remote_hosts的配置是否正确。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容