Jmeter分布式部署之采坑之路
jmeter分布式部署如下图,压力机可以根据并发量的多少增加减少,jmeter分布式部署网上教程很多,不在累赘,主要是对测试中遇到的一些问题,与服务器调优进行记录。
问题一:分布式测试前先用ntp服务同步所有服务器的时间,否则tps结果误差较大。
问题二:连接slave机时提示 connect refuse
先检查controller和agent是否在同一网段内,是否可以相互ping通,如果可以ping通检查服务器防火墙的状态,防火墙如果在开启状态必须关闭防火墙。
问题三:往上加压力发现压力上不去,qps波动也很大
发压力的同时监控一些网络数据,也可是使用linux命令查看对应的网络连接建立数,通过监控数据可以对linux的一些内核参数进行优化
echo "10000 64000" > /proc/sys/net/ipv4/ip_local_port_range
# 默认情况向可以使用的随机端口数为:32768到61000,适当增大向外连接端口的范围
net.ipv4.tcp_max_tw_buckets = 5000
#表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
jmeter发送到32394个线程提示内存溢出
echo 1000000 > /proc/sys/vm/max_map_count
修改最大进程数后系统恢复
echo 1000000 > /proc/sys/kernel/pid_max
查看最大进程数
sysctl kernel.pid_max
永久生效
echo "kernel.pid_max=1000000 " >> /etc/sysctl.conf
sysctl -p
问题四: Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock
这个原因是linux中限制了默认打开文件的数量默认为1024
可以使用ulimit -n 102400临时生效
修改/etc/security/limits.conf,
增加如下信息:
* soft nofile 32768 --软限制
* hard nofile 65536 --硬限制
重启服务器后永久生效
问题五:在分布式中使用命令行动态传入线程数、启动时间等参数运行时,发现参数失效,分布式应该不支持动态传入参数
问题六:分布式运行过程中压力机内存溢出,可以在jmeter的bin目录下的jmeter文件中的对应的参数: "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"
也可以启动压力机时添加参数的方式:
java -server -XX:+HeapDumpOnOutOfMemoryError -Xss228k -Xms256m -Xmx10240m -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -jar ./ApacheJMeter.jar -Djava.rmi.server.hostname=192.168.19.34 -Dserver_port=1099 -s -j jmeter-server.log
配合上面linux的设置,亲测单台压力机支持5万并发。
问题七:并发量大持续时间过长保留的测试结果jtl文件过大
可以使用influxdb+jmeter+granafa实时监测测试结果数据