共计 2072 个字符,预计需要花费 6 分钟才能阅读完成。
最艰难的事件就是意识本人!
集体网站,欢送拜访!
前言:
最近,应用 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 连接池等,进行正当的大小配置;
❤不要遗记留下你学习的脚印 [点赞 + 珍藏 + 评论]嘿嘿ヾ
所有看文章不点赞都是“耍流氓”,嘿嘿ヾ (◍°∇°◍)ノ゙!开个玩笑,动一动你的小手,点赞就完事了,你每个人出一份力量(点赞 + 评论) 就会让更多的学习者退出进来!非常感谢!~ω~=