失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > tps压不上去 可能有哪些方面原因?

tps压不上去 可能有哪些方面原因?

时间:2023-08-29 08:44:00

相关推荐

tps压不上去 可能有哪些方面原因?

1)硬件资源

应用服务器、数据库服务器、缓存服务器等的CPU(配置、使用率等)、内存(占用率等)、磁盘(I/O、页交换等)等占用率较高,服务器处理能力饱和,将导致部分请求无法响应。

还有网络带宽,也是比较容易忽略的一个因素,因为机房服务器之间的网络至少是千兆光纤连接,一般不会存在网络传输瓶颈,但如果应用存在跨机房调用,或压测机与被测应用不在同一机房,就可能达到网络节点的传输瓶颈。

实际业务场景中,因为硬件资源本身导致的tps出现瓶颈的例子相对占比较低,通常情况都是,服务器CPU、内存、网络带宽、磁盘I/O等硬件资源利用率都远低于80%的资源利用率警戒线,但tps已经达到上限,不管如何增加并发压力,tps都无法上升,而响应时间一再变长,错误率也不断增加。

2)连接池

连接池一般分为服务器线程连接池(简称线程池,如Tomcat的线程池Executor)和数据库连接池,不论是线程池还是数据库连接池,其很重要的两个作用,一是减少频繁创建、销毁连接所消耗的CPU等系统资源,二是因为连接池中的连接可直接使用,无需使用时再创建,因而提高了系统访问效率。

举个例子,假如张某计划开车从北京到天津,如果没有现成的公路(连接池),张某就需要先修一条从北京到天津的公路(建立连接),修好路后通过这条公路从北京开车到达天津,之后再将这条路拆除(销毁连接),这个过程中,修路和拆路不但需要耗费大量的人力、物力,还需要等待比较长的时间,等建好后张某才能开车上路,如果已经有现成的公路,张某就完全不必自己去修建公路了。

连接池的配置中有一个最大连接数的配置信息,如果最大连接数较低,可用的连接数太少,就会造成请求等待,从而影响应用处理事务的能力。

3)数据库配置

高并发情况下,如果对同一数据表同时进行读写操作,可能会造成数据库锁冲突从而极大的影响数据库事务的处理能力,影响到tps。

数据库的读操作和写操作是两种不同类型的事务,对数据库的存储引擎、索引建立均有不同的要求,以MySQL为例,有如下两种常用的存储引擎:

MyISAM 存储引擎:不支持事务、表锁设计,支持全文索引,主要面向一些在线分析处理(OLAP)数据库应用。说白了主要就是查询数据,对数据的插入,更新操作比较少。

InnoDB 存储引擎:支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。

另外,对于读操作来说,索引越多,应对不同业务场景的查询速度就越快,但对于写操作来说,Insert、Update数据都需要动态维护索引,因而会降低写的速度,且随着数据量的增加,索引文件也会越来越大。因此,通常需要对数据库服务器做主从同步、读写分离。

4)sql语句

大表count、多表联查、没有limit限制、order by/group by字段未建索引、select * 等不规范的sql语句都可能导致慢sql,会使数据库查询性能下降;再比如写入数据的sql如果没有绑定变量,会造成每条语句都要被数据库解析一次,不但造成数据库资源的过度消耗,同时也影响sql执行的效率,最终影响tps。

5)垃圾回收机制

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

6)系统架构

应用服务:应用服务器是否对静态资源与逻辑处理层做了分离,这也会影响tps。通常将静态资源(HTML,JavaScript,CSS,img等文件)部署在Nginx或者CDN,逻辑处理层部署在应用服务器,达到动静分离,提升tps的目的。

数据服务:热数据是否缓存、缓存的命中率、缓存数据的更新机制、缓存过期等,也都会影响应用访问数据的效率,从而影响tps。这里面重点说明缓存中需要注意的两个点:

缓存穿透:查询一个一定不存在的数据,此时缓存未命中,而数据库也无法查询到该数据,出于容错考虑,如果从数据库也查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,如果有人利用这个漏洞,大批量在系统中查询这个不存在的数据,就可能导致数据库访问量过载而崩溃。

缓存雪崩:在设置缓存时如果采用了相同的过期时间,会导致缓存在某一时刻同时失效,这时候所有请求全部转发到数据库,数据库瞬时压力过重而出现雪崩。

7)测试因素

压测机单机负载能力有限,如果需要模拟的并发用户请求数超过其负载极限,也会间接影响tps,这个时候就需要进行分布式压测来解决单机负载过高的问题,另外,实际执行压测时,用命令行模式启动脚本执行测试,将更节省系统资源,避免因压测机本身CPU、内存等资源问题导致测试异常。

你在测试过程中有遇到什么问题呢?欢迎VX添加Test_Club与我沟通交流。

答测友问:tps压不上去,可能有哪些方面原因?

如果觉得《tps压不上去 可能有哪些方面原因?》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。