| 1. 准备工作(1) 注意事项官网给出了一些注意事项: 系统上的防火墙被关闭或正确的端口被打开。the firewalls on the systems are turned off or correct ports are opened.
所有的客户端都在同一个子网上。all the clients are on the same subnet.
如果使用192.x.x.x或10.x.x.x IP地址,则服务器位于同一子网中。 如果服务器不使用192.xx或10.xx IP地址,则不应该有任何问题。(jmeter脚本文件里的目标地址一定要用内网IP,不用用公网IP,不然流量会都卡在带宽上。用ping去检查是否连通)the server is in the same subnet, if 192.x.x.x or 10.x.x.x IP addresses are used. If the server doesn’t use 192.xx or 10.xx IP address, there shouldn’t be any problems.
确保JMeter可以访问服务器。Make sure JMeter can access the server.
Make sure you use the same version of JMeter and Java on all the systems. Mixing versions will not work correctly.确保在所有系统上使用相同版本的JMeter和Java。 混合版本将无法正常工作。
您已为RMI设置SSL或将其禁用。You have setup SSL for RMI or disabled it.
 (2) 专业名词Master: 司令Slave: 奴隶Target: 目标
  
 
 (3) 远程拷贝当有一台Linux中存在某文件,可以通过scp命令将它拷贝到其他Linux机器,尤其是使用内外地址传输时,更显快速 scp -r <当前机器中待拷贝文件所在目录> root@<IP>:<目标机器中副本文件的存放目录(已存在)>
 在分布式压测的准备工作中,可以使用该命令将jdk和jmeter复制到各slave机器中
  (4) 启动Slave有以下两种启动方式 1) 直接启动可看到压测效果和日志 ./jmeter-server
 2) 守护进程方式启动nohup ./jmeter-server &
 检查是否启动成功 ps -ef|grep jmeter-server
ps aux|grep jmeter-server
 2. 常见问题(1) UnknownHostException[root@iZwz95j86y235aroi85ht0Z bin]
	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) FileNotFoundException[root@iZwz95j86y235aroi85ht0Z bin]
	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的有效密钥库,或者禁用了SSLjmeter.property里面 server.rmi.ssl.disable 改为 true,表示禁用
 (3) Cannot allocate memory[root@iZ949uw2xehZ bin]
		Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12)
		
		
		
		
		
 解决方案编辑jmeter搜索 : “${HEAP:=”-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"改变初始堆内存和最大堆内存
 (4) Server Port解决方案仅修改 server_port 即可,下面两者一样 server.rmi.localport=8899 表示slave server启动显示的端口server_port=8899 表示master机器要远程连接的端口,即 remote_hosts=xxxx:8899
 (5) 多网卡配置解决方案我们要在多网卡的服务器上开启RMI服务的话必须指定IP,使他们能够在同一个网段内需要以下几步(假定所有机器都在10.120.11.*网段,agent服务器为linux,controller服务器为windows)
 修改agent服务器,指定agent机器的IP 
  修改jmeter-server文件
 # vi jmeter-server修改RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx(需要连接的IP)
修改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%
 (6) 工具安装解决方案确定在controller机器上安装jdk,版本和jmeter一致,配置环境变量:Java_home等在Agent机器上安装jdk,配置环境变量:Java_home和JMeter_home安装目录不要带空格,最好都是简短的英文路径
 (7) 压测文件解决方案master机器启动后会拷贝jmx文件到slave机器,所以不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可总样本数 = 线程数 * 循环次数 * 执行机总数
如果使用csv进行参数化,则需要把参数文件在每台slave上拷一份且路径需要设置成一样的
 (8) 连接失败解决方案按照以下步骤进行排查: jmeter-server是否启动是否联网ping 服务器IP是否畅通telnet 端口 192.168.3.10 1099检查服务器的防火墙是否关闭阿里云安全策略是否正常
 (9) could not find ApacheJmeter_core.jar解决方案在Agent机器安装jdk,并设置环境变量 (10) Bad call to remote host解决方案检查被控制机器上的jmeter-server有没有启动,或者remote_hosts的配置是否正确 |