

JMeter压测时跑一会聚合报告就不动了?
source link: https://leishen6.github.io/2020/09/24/JMeter_pressuretest_problem/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近,使用 JMeter 对项目进行压力测试;起初, JMeter 设置的并发线程数只是10个,然后在进行压力测试时,发现跑了一会后 JMeter 聚合报告 中的中数字全部不动了(像卡死了一样);
上面简单描述了本文要说的问题;下面将主要从两方面来进行聊。
①、具体问题描述
②、具体的排查思路
问题详述:
项目部署情况: 提供服务接口的项目 + Tomcat + Oracle
提供服务接口的项目:接口中包含很多的数据库查询、更新、新增操作;
部署项目的应用服务器: Tomcat
连接的关系数据库: Oracle
数据源配置 : 在Tomcat中的 context.xml 中配置数据源,连接池使用的是 Druid;
根据上面的部署情况, 然后使用 JMeter 进行压测,就出现了文中一开头说的问题,如下图:
问题排查:
下面会简单的描述下此问题的排查过程,让大家在面对这种问题时,可以有一些思路。
鉴于本人水平有限,如有问题敬请提出。
1、查看 JMeter 结果树:
首先看下 JMeter 结果树 中是否存在错误的日志,如果存在,然后看看是什么问题,具体进行解决;
但是,本文遇到这个问题时,发现结果树中并没有输出错误日志,说明请求接口时未出现问题;
2、服务端排查:
因为 JMeter 结果树中未展示出错误的内容,说明此时程序是正常运行着;
然后查看服务端日志,发现没有出现任何 异常 日志;
看到这,就发现怪异之处了,服务端也没有报任何错误,那问题到底出在哪里呢?
别着急,还得去看 JMeter 的聚合报告去,通过聚合报告可以发现一些问题,就是聚合报告中 请求接口的平均响应时间太长了,高达 2 秒多,这个不正常呀,但是代码逻辑确保是没有任何问题的;
噢,对了,接口中存在很多数据库操作,是不是数据库出现了问题,导致数据库操作比较耗时呢;通过查看数据库服务发现是正常的;那是不是连接数不够用了呢? 嗯嗯,那来看下具体数据源的配置信息:
通过查看 数据源 的配置信息发现,Druid 连接池没有配置 最大连接数 以及最小连接数等 ;要知道 druid默认的最大连接数是 8 ,然后咱再去使用命令查询下当前数据库的连接数: netstat -pan | grep 1521 | wc -l ,发现连接数是 8,说明当前压测时,连接数已经到达了最大值;由于连接不够用,导致程序中进行 JDBC 数据库操作时需要等待可用连接,所以说非常耗时,响应时间就慢了,进而导致大量到达 Tomcat的请求得不到及时的处理,最终导致 JMeter 像卡死一样。
解决方式:在数据源配置中添加上 最大连接数等 ;完整数据源配置如下:
最大连接数设置为了 maxActive=”300” ; 最小连接数设置为了 minIdle=”50” 。
<Resource name="jdbc/testdemo" type="javax.sql.DataSource" factory="com.alibaba.druid.pool.DruidDataSourceFactory" url="jdbc:oracle:thin:@192.168.3.125:1521:ora11g" driverClassName="oracle.jdbc.driver.OracleDriver" username="root" password="root" auth="Container" initialSize="30" maxActive="300" minIdle="50" maxWait="30000" timeBetweenEvictionRunsMillis="30000" minEvictableIdleTimeMillis="600000" maxEvictableIdleTimeMillis="900000" poolPreparedStatements="true" maxOpenPreparedStatements="20" validationQuery="select 1 from dual" testOnBorrow="false" testOnReturn="false" testWhileIdle="true" filters="wall,stat,log4j2" />
总结:
在项目进行压测前,一定记得需要结合当前机器的配置,以及制定的压测计划对一些参数进行优化;下面简单的说几方面,如果有不同见解,大家可以评论补充;例如:
①、如果 JMeter 设置的并发数比较大的话,需要将 Tomcat 的 连接器参数 进行优化一下,否则可能会出现请求处理超时,没有更多的线程去处理连接请求;
②、还有需要对 Tomcat 进行 JVM 参数调试,根据当前机器的硬件配置进行合理的 JVM 参数设置;
③、最后,特别重要的是 连接池 的配置,例如 :数据库连接池、redis连接池等,进行合理的大小配置;
❤不要忘记留下你学习的足迹 [点赞 + 收藏 + 评论]嘿嘿ヾ
一切看文章不点赞都是“耍流氓”,嘿嘿ヾ(◍°∇°◍)ノ゙!开个玩笑,动一动你的小手,点赞就完事了,你每个人出一份力量(点赞 + 评论)就会让更多的学习者加入进来!非常感谢! ̄ω ̄=
Recommend
-
31
-
23
从尝鲜的角度来看,5G 网络的体验只会在目前的基础上随着时间变得越来越好,而且从推进力度看这个时间可能并不会太久。从实用的角度来看,5G 设备目前并没有任何性价比可言,5G 网络覆盖从个人感知上来说也远远没有运营商们所说那么进展飞速,目前购买 5G 手机几乎...
-
32
性能测试 性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。不同视角下的网站性能有不同的标准,也有不同的优化手段。 主观视角:用户感受到的性能 加载页(先...
-
30
别做「开始爱好者」,让自己的想法飞一会非著名程序员公众号「非著名程序员」主理人,程序员/复业者/生涯规划师...
-
5
王团长区块链日记1225篇:让子弹飞一会可能涉及财产风险大家要加群的私信我昨天晚上美图发消息,又买了381枚比特币和1.6万枚eth,美图老板2017年的时候就在币圈玩,玩的还...
-
10
Golang GIN写单测时,愉快的使用返回值 我写的接口,基本长这样: { "code": 200, "msg": "原因", "result": {} // 或者空或者其它 } 所以在Go里,定义如下: type Resp struct { Co...
-
27
V2EX › 程序员 迫于小组内唯一会前端的老哥跑路,求前端老哥们给个 VUE 相关的前端速成路线
-
5
在平时用jmeter做测试时,生成报告的模板,不是特别好。大家应该也知道allure报告,页面美观。 先来看效果图,报告首页,如下所示:
-
10
频域是和时域相对的一个概念,是描述信号在频率方面特性时用到的一种坐标系,在电子学,控制系统工程和统计学中,频域图显示了在一个频率范围内每个给定频带内的信号量,频域表示还可以包括每个正弦曲线的相移的信息,以便能够重新组合频率分量以恢复原始时间信号。接下来...
-
2
【踩坑】Flutter环境监测时报错 2023-06-09 ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK