JMeter压力测试与JVM监控以及调优

一、性能指标

-★ 响应时间(Response Time: RT)

响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响
应结束,整个过程所耗费的时间。
HPS(Hits Per Second) :每秒点击次数,单位是次/秒。
★TPS(Transaction per Second):系统每秒处理交易数,单位是笔/秒。
★QPS(Query per Second):系统每秒处理查询次数,单位是次/秒。
对于互联网业务中,如果某些业务有且仅有一个请求连接,那么 TPS=QPS=HPS,一
般情况下用 TPS 来衡量整个业务流程,用 QPS 来衡量接口查询次数,用 HPS 来表
示对服务器单击请求。
无论 TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经
验,一般情况下:
金融行业:1000TPS~50000TPS,不包括互联网化的活动(秒杀等)
保险行业:100TPS~100000TPS,不包括互联网化的活动
制造行业:10TPS~5000TPS
互联网电子商务:10000TPS~1000000TPS
互联网中型网站:1000TPS~50000TPS
互联网小型网站:500TPS~10000TPS
最大响应时间(Max Response Time) 指用户发出请求或者指令到系统做出反应(响应)
的最大时间。
最少响应时间(Mininum ResponseTime) 指用户发出请求或者指令到系统做出反应(响
应)的最少时间。
90%响应时间(90% Response Time) 是指所有用户的响应时间进行排序,第 90%的响应时间。
从外部看,性能测试主要关注如下三个指标
吞吐量可以理解为TPS或QPS:每秒钟系统能够处理的请求数、任务数。
响应时间:服务处理一个请求或一个任务的耗时。
错误率:一批请求中结果出错的请求所占比例。

二、JMeter压力测试

2.1 下载

官网:https://jmeter.apache.org/
下载:https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.1.tgz

2.2 安装与启动

解压后点击jmeter.bat 启动在这里插入图片描述

2.3 使用

选择中文窗口,由于我选完中文以后,右上角的线程数和总耗时看不到了,所以我就不设置中文了。
在这里插入图片描述
创建线程组
在这里插入图片描述
设置线程数和次数
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210617205727616.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L
2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
在这里插入图片描述
添加http请求
在这里插入图片描述
添加监控,一般我们选择前3个监控
在这里插入图片描述
查看结果树
在这里插入图片描述
汇总报告
在这里插入图片描述

聚合报告
吞吐量 :189 下面我们做一下优化
在这里插入图片描述
在这里插入图片描述

2.4 分析结果报告

首先考虑自己的应用属于 CPU 密集型还是 IO 密集型
** 有错误率同开发确认**,确定是否允许错误的发生或者错误率允许在多大的范围内;
Throughput 吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加;若在压测的机
器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的
往下减,找到最佳的并发数;
压测结束,登陆相应的 web 服务器查看 CPU 等性能指标,进行数据的分析;
最大的 tps,不断的增加并发数,加到 tps 达到一定值开始出现下降,那么那个值就是
最大的 tps。
最大的并发数:最大的并发数和最大的 tps 是不同的概率,一般不断增加并发数,达到
一个值后,服务器出现请求超时,则可认为该值为最大的并发数。
压测过程出现性能瓶颈,若压力机任务管理器查看到的 cpu、网络和 cpu 都正常,未达到 90%以上,则可以说明服务器有问题,压力机没有问题。
影响性能考虑点包括
数据库、应用程序、中间件(tomact、Nginx)、网络

CPU密集型:一般是有大量的计算排序等的应用,如果cpu占用70-80%以上就是cpu密集型
IO密集型:网络传输,文件保存,磁盘读写,数据库读写,redis读写,es读写等

2.5 实战1 测试中间件对性能的影响

我们的项目在访问一个微服务请求时,第一步要经过nginx ,第二步要经过gateway,第三步才会访问到具体的微服务接口,由于我们的微服务时装在虚拟上的,相当于时本地会启动很多的应用,所以测试时并发线程不能设置太高,我们以50个线程 无线循环进行测试。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
压测首页的所有资源和数据
在这里插入图片描述

三、jvisualvm 性能监控的安装和使用

3.1 jvm内存模型

3.2 性能监控工具jconsole 和 jvisualvm

Jdk 的两个小工具 jconsole、jvisualvm(jdk1.6以上版本才有,升级版的 jconsole);通过命令行启动,可监控本地和
远程应用。远程应用需要配置,所以我们重点使用jvsualvm
jsoncole 显示样例
在这里插入图片描述
★ jvisualvm 监控
第一步:运行,cmd下输入jvisualvm 启动工具
在这里插入图片描述
在这里插入图片描述
第二步:选中某个微服务进行监控

在这里插入图片描述
第三步:查看各部分信息
概况
在这里插入图片描述
监视
在这里插入图片描述
线程
在这里插入图片描述
监控内存泄露,跟踪垃圾回收,执行时内存、cpu 分析,线程分析… 运行:正在运行的
在这里插入图片描述
休眠:sleep
等待:wait
驻留:线程池里面的空闲线程
监视:阻塞的线程,正在等待锁

GC监控,需要安装gc插件,gc插件的安装方法在本文的末尾。
在这里插入图片描述

3.3 jvisualvm 远程监控

样例

java -jar -Djava.rmi.server.hostname=10.30.23.62 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1141 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dfile.encoding=UTF-8 arthas-demo.jar

参数说明

-Djava.rmi.server.hostname=192.168.1.230 // 主机地址 ★
-Dcom.sun.management.jmxremote=true // 运行远程链接jvm虚拟机
-Dcom.sun.management.jmxremote.port=1141 // 远程链接jvm的端口 ★
-Dcom.sun.management.jmxremote.ssl=false // 是否使用ssl加密传输
-Dcom.sun.management.jmxremote.authenticate=false // 是否需要认证

```![在这里插入图片描述](https://img-blog.csdnimg.cn/ad9d467ad43d4c00b8337c7df785bb61.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4a6259574b9c4c4eaaa915e43bb75c83.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/424ab53b6f5145059f99bd2b7deebe17.png)


## 四、 优化

### 4.1 优化jvm的大小   Xmx100m 改为 Xmx512m
吞吐量从:189  变成 199.6  优化有效
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210617214126298.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210617214714237.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
full gc要比 gc慢10倍以上,所以要尽量减少full gc
###  4.2 

## 其他
### 1)JMeter Address Already in use 错误解决
windows 本身提供的端口访问机制的问题。
Windows 提供给 TCP/IP 链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致
我们在短时间内跑大量的请求时将端口占满了。
1.cmd 中,用 regedit 命令打开注册表
2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下,
1 .右击 parameters,添加一个新的 DWORD,名字为 MaxUserPort
2 .然后双击 MaxUserPort,输入数值数据为 65534,基数选择十进制(如果是分布式运
行的话,控制机器和负载机器都需要这样操作哦)
3.添加DWORD            TCPTimedWaitDelay:30
4. 修改配置完毕之后记得**重启机器**才会生效
https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-grea
ter-than-5000-you-receive-t
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210617220234276.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
### 2)jvisualvm  安装插件方便查看 gc
第一步:插件工具下载地址设置
工具》插件-设置
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619112320516.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
**第二步:通过 [https://visualvm.github.io/pluginscenters.html](https://visualvm.github.io/pluginscenters.html) 获取当前jdk对应插件地址**
插件选择地址:[https://visualvm.github.io/pluginscenters.html](https://visualvm.github.io/pluginscenters.html)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619112821139.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
**第三步:设置正确的插件地址并安装插件,就是第一步中最后的那个位置,但要注意把地址中的https改成http协议,要不然会出现无法获取插件的问题**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619115033433.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619115100655.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
安装插件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619115215106.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
由于jvisualvm不支持https而无法现在的解决办法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619120248309.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619120610137.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619120756693.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)
测试
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061912352892.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbl9kb3Vfc2hhb19uaWFu,size_16,color_FFFFFF,t_70)

### 3)几个常用工具 与 命令示例
| 工具名称 | 描述      |
|:--------:| -------------:|
|  jstack | left-aligned 查看 jvm 线程运行状态,是否有死锁现象等等信息 |
| jinfo | left-aligned 可以输出并修改运行时的 java 进程的 opts。 |
|  jps | left-aligned 与 unix 上的 ps 类似,用来显示本地的 java 进程,可以查看本地运行着几个 java程序,并显示他们的进程号。 |
|  jstat | left-aligned 一个极强的监视 VM 内存工具。可以用来监视 VM 内存内的各种堆和非堆的大小及其内存使用量 |
|  jmap | left-aligned 打印出某个 java 进程(使用 pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量) |

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
接口调优JMeter压力测试是两个不同的概念,但它们可以相互配合来优化接口性能。下面我将分别介绍这两个方面的内容。 接口调优是指对接口进行优化,以提高其性能和效率。在进行接口调优时,可以考虑以下几个方面: 1. 代码优化:对接口的代码进行优化,如减少不必要的计算、避免重复查询等,以提高代码的执行效率。 2. 数据库优化:对接口所涉及的数据库进行优化,如建立索引、优化查询语句等,以减少数据库查询的时间。 3. 缓存优化:使用缓存技术,将接口的响应结果缓存起来,减少重复计算和查询,提高接口的响应速度。 4. 并发处理:针对高并发场景,对接口进行并发处理的优化,如使用线程池、异步处理等,提高接口的并发能力。 JMeter是一款常用的压力测试工具,可以模拟多用户同时访问接口,以测试接口的性能和稳定性。使用JMeter进行压力测试时,可以按照以下步骤进行: 1. 配置测试计划:设置测试计划,包括目标接口、并发用户数、请求频率等。 2. 添加线程组:添加线程组,设置并发用户数和持续时间等参数。 3. 添加HTTP请求:添加HTTP请求,配置接口的请求方式、URL、参数等。 4. 添加监听器:添加监听器,用于查看测试结果,如响应时间、吞吐量等。 5. 运行测试:运行测试计划,查看接口在不同并发条件下的性能表现。 通过JMeter压力测试,可以发现接口的性能瓶颈,并根据测试结果进行接口调优,以提高接口的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值