jmeter TPS上不去的原因

一、TPS上不去的原因


1、网络带宽

在压力测试中,有时候要模拟大量的用户请求,如果单位时间内传递的数据包过大,超过了带宽的传输能力,那么就会造成网络资源竞争,间接导致服务端接收到的请求数达不到服务端的处理能力上限。

2、连接池

可用的连接数太少,造成请求等待。连接池一般分为服务器连接池(比如 Tomcat)和数据库连接池(或者理解为最大允许连接数也行)。

3、垃圾回收机制

从常见的应用服务器来说,比如 Tomcat,因为 java 的的堆栈内存是动态分配,具体的回收机制是基于算法,如果新生代的 Eden 和 Survivor 区频繁的进行 MinorGC,老年代的 fullGC 也回收较频繁,那么对 TPS 也是有一定影响的,因为垃圾回收其本身就会占用一定的资源。

4、数据库配置

高并发情况下,如果请求数据需要写入数据库,且需要写入多个表的时候,如果数据库的最大连接数不够,或者写入数据的 SQL 没有索引没有绑定变量,抑或没有主从分离、读写分离等,就会导致数据库事务处理过慢,影响到 TPS。

5、通信连接机制

串行、并行、长连接、管道连接等,不同的连接情况,也间接的会对 TPS 造成影响。

6、硬件资源

包括 CPU(配置、使用率等)、内存(占用率等)、磁盘(I/O、页交换等)。

7、压力机

比如 jmeter,单机负载能力有限,如果需要模拟的用户请求数超过其负载极限,也会间接影响 TPS(这个时候就需要进行分布式压测来解决其单机负载的问题)。

8、压测脚本

还是以 jemter 举个例子,之前工作中同事遇到的,进行阶梯式加压测试,最大的模拟请求数超过了设置的线程数,导致线程不足。提到这个原因,想表达意思是:有时候测试脚本参数配置等原因,也会影响测试结果。

9、业务逻辑

业务解耦度较低,较为复杂,整个事务处理线被拉长导致的问题。

10、系统架构

比如是否有缓存服务,缓存服务器配置,缓存命中率、缓存穿透以及缓存过期等,都会影响到测试结果。

二、TPS上不去监控/分析思路

1、ping 命令查看下网络延迟时间,如果延迟时间很长可以断定网络问题

2、然后看不断的加线程或者请求,用top命令看看load值,平均负载和CPU,内存是否有变化

如果变化不大有没有可能是Tomcat服务器的连接池太小导致,发送的请求被限制了,看Tomcat是不是用的bio,改为nio并行的io看看tps的变化大不大

3、如果没有以上原因,接着去看是不是数据库连接池太小,然后接着通过

jmap -head pid
jstat -gcutil pid 1000
vmstat 1 10
命令去看看是否有频繁的fullgc和中断,上下文切换,如果有频繁的垃圾回收也会导致tps抖动厉害上不去

包括是否有频繁的上下文切换,内核被消耗,因为频繁的io读取也会导致上下文切换过高,从而资源飙升,导致tps上不去

所以通过dump一下当前的线程的堆栈信息去看看有没有阻塞之类的来进行定位

4、包括会去看是不是压力机本身压力就不够,这种通过分布式去压测

5、如果这些都做好了,看一下是不是压测脚本里面事务比较复杂,并且加了思考时间之类的。

6、有必要的话也要通过Prometheus+grafana进行全局的监控

如果通过skywalking去监控每个节点所耗费的时间来具体定位分析

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耀晨一生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值