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实时监测测试结果数据

 

posted @ 2020-09-08 17:50  不懂8  阅读(485)  评论(0编辑  收藏  举报