序
本文记录了我在新公司的首次压测遇到的一些问题以及解决方案。公司服务部署在国外,网络延迟导致的压不上去,需要本地调试脚本,然后用国外服务器压测的过程。同时记录了过程中遇到的一些问题,特别是Jmeter本身占用CPU资源,需要修改参数。
安装包
Jmeter包,已调好配置参数:
通过网盘分享的文件:apache-jmeter-5.6.3.zip
链接: https://pan.baidu.com/s/1-L6ASOdnBwvWi5_gpAW1gw?pwd=4uce 提取码: 4uce
--来自百度网盘超级会员v3的分享
脚本配置
1、新建线程组
2、脚本配置
新加HTTP请求
脚本配置
添加请求头
添加参数化
注意用相对路径,因为要拷贝到远程机器运行,绝对路径会找不到文件,运行不起来,还没报错。
3、压测报表
虚拟机配置
安装Java环境
1、先从官网下载jdk1.8.0_131.tar.gz,再从本地上传到Linux服务器
2、解压:tar -xzf jdk1.8.0_131.tar.gz,生成文件夹 jdk1.8.0_131
jdk存放目录:/home/azureuser/jmeter/jdk1.8.0_451
修改配置:vi /etc/profile
export JAVA_HOME=/home/azureuser/jmeter/jdk1.8.0_451
export PATH=$JAVA_HOME/bin:$PATH
加载配置 : source /etc/profile
查看是否安装成功:java -version
安装Jmeter
1、本地Jmeter打包。最好用跟本机一样的jmeter,不会出现插件不一致等导致的运行不起来
2、传到服务器
3、解压缩
tar -xvzf apache-jmeter-5.6.3.tgz
unzip
jmeter路径:/home/azureuser/jmeter/apache-jmeter-5.6.3
4、配置Jmeter环境变量。
vi /etc/profile,再添加如下变量
export JMETER_HOME=/home/azureuser/jmeter/apache-jmeter-5.6.3
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:
export PATH=$JMETER_HOME/bin:$JAVA_HOME/bin:$PATH
5、source /etc/profile (让配置文件立马生效)
6、查看是否安装成功,执行命令:jmeter -v
设置Jmeter启动内存
1.创建setenv.sh文件
在jmeter的bin目录下新建setenv.sh配置文件,在文件中配置jvm参数
export JVM_ARGS="-Xms4096m -Xmx4096m -XX:MaxMetaspaceSize=2048m"
大小参考本机可用内存,50%-70%之间
修改Jmeter参数
1、system.properties
增加mode=StrippedBatch
2、解决timewait问题
修改所有jmeter主机-负载机配置 使用httpclient4客户端
jmeter.properties
httpclient4.time_to_live=300000
httpclient4.validate_after_inactivity=1000
httpclient4.request_sent_retry_enabled=true
httpclient4.retrycount=2
hc.parameters.file=hc.parameters
httpclient.reset_state_on_thread_group_iteration=false
3、hc.parameters
http.connection.stalecheck$Boolean=true
4、客户端配置
运行jmeter
jmx文件单独放/home/azureuser/jmeter/jmx
jmeter安装于/home/azureuser/jmeter/apache-jmeter-5.6.3
本地文件上传到服务器,注意使用到的数据文件也要传过去,可以整个目录传(使用的ssh软件:electerm)
进入 jmx所在目录
jmeter -n -t hawbTracks.jmx -l result_hawbTracks_05310813.jtl -L DEBUG
jmeter -n -t hawbTracks.jmx -l result_hawbTracks_05312207.jtl -e -o ./result 生成html报告,result 目前提前清空
jmeter -n -t hawbTracks.jmx -l result_hawbTracks_06031927.jtl -e -o ./06031927_result
监控查看
1、压测指标QPS、RT。关注响应时间增加明显,QPS增量低,无需再加QPS,防止压挂服务器。
2、服务器情况查看
机器情况以Grafa查看
服务qps、响应,以及响应时间明细用skywalking查看
3、从网关层压测,所以网关服务器性能也需要关注下
4、压测服务器的性能也需关注下。可以开多个窗口,top命令看服务器情况
常见命令:
top:本机性能指标查看,1 - 每个cpu指标查看,MiB Mem-内存查看
ps -ef pid : 进程查看
报告查看
1、报告回传到本机
2、打开jtl文件
3、result中index.html浏览器打开
使用jmeter -n -t hawbTracks.jmx -l result_hawbTracks_05312207.jtl -e -o ./result 生成html报告,可以直接查看
问题记录
1、网络损耗
本地压测由于是中国网段压测美国网段,网络损耗巨大。对比如下:
本地压测情况,3个并发
服务器压测情况,压测服务器与被压测服务器都在美国
对比发现,网络损耗在600ms。所以需要使用同区域压测服务器来压,得到真实的性能情况。
2、Jmeter中响应时间疑惑
现象:本地Jmeter压测时间稳定在600ms左右,但是POSTMAN是偶尔600ms多,多数在200ms。
原因:Postman接口发送使用的端口,会有链接缓存,不会每次新建连接。现象上佐证:隔段时间请求是600+ms,不间隔再次访问是200ms。
3、服务端Jmeter运行报错,jp@gc组件找不到
原因:运行的官网下载的jmeter,里面没有相关组件导致
4、服务端Jmeter运行无数据生成,无报错,直接停止了
配置的脚本的,csv文件配置的windows中绝对路径,拷贝到linux上,找不到文件,导致运行不起来。
5、压测机本身性能问题,导致QPS上不去
1、关闭部分java程序。 ps -ef pid查看进程信息
2、增加jmeter内存大小
3、多台机器压测
4、修改jmeter配置 - 有用