性能测试之压测中TPS上不去的几种原因分析

什么叫TPS

TPS(Transaction Per Second):每秒事务数,指服务器在单位时间内(秒)可以处理的事务数量,一般以request/second为单位。

TPS上不去的常见原因

1、网络带宽

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

2、连接池

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

(关于连接池的具体内容,可参考之前的博客:性能测试:连接池和线程)

3、垃圾回收机制

从常见的应用服务器来说,比如Tomcat,因为java的的堆栈内存是动态分配,具体的回收机制是基于算法,如果新生代的Eden和Survivor区频繁的进行Minor GC,老年代的full GC也回收较频繁,那么对TPS

也是有一定影响的,因为垃圾回收其本身就会占用一定的资源。

4、数据库配置

高并发情况下,如果请求数据需要写入数据库,且需要写入多个表的时候,如果数据库的最大连接数不够,或者写入数据的SQL没有索引没有绑定变量,抑或没有主从分离、读写分离等,

就会导致数据库事务处理过慢,影响到TPS。

5、通信连接机制

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

(关于协议的连接,可参考之前的博客:HTTP协议进阶:连接管理)

6、硬件资源

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

7、压力机

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

8、压测脚本

还是以jemter举个例子,之前工作中同事遇到的,进行阶梯式加压测试,最大的模拟请求数超过了设置的线程数,导致线程不足。

提到这个原因,想表达意思是:有时候测试脚本参数配置等原因,也会影响测试结果。

9、业务逻辑

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

10、系统架构

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

PS:性能瓶颈分析不能单从局部分析,要综合起来,多维度分析问题原因。上面列出的几点,可能有描述不当或者遗漏的,仅供参考。。。

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-06-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

《手Q Android线程死锁监控与自动化分析实践》

手Q每个版本上线以后研发同学都会收到各种问题反馈。在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下:

8798
来自专栏一名叫大蕉的程序员

分布式文件系统.get(V2)No.106

2018年9月28号,我估计会记得很久这一天,因为那天刚刚好是我来西厂的一周年,那天刚刚好是农历生日,刚刚好那天晚上我挖了一个大坑,跟遣怀师兄和小美姐姐一起填坑...

1152
来自专栏码神联盟

碎片化 | 第一阶段-06-第一个小程序-视频

如清晰度低,可转PC网页观看高清版本: 第一个java程序Hello word 暂时我们先使用记事本来编写代码,不建议直接使用开发工具eclipse,那都自动生...

3728
来自专栏Python专栏

Python | 利用Python实现微博监控小姐姐动态

作者:奶权 来源:http://www.jianshu.com/p/9e7ba0a0a610

2902
来自专栏张戈的专栏

WordPress发布文章同步到新浪微博失败的问题解决与分享

张戈博客很久之前分享过一篇 WordPress 发布文章同步到新浪微博 的文章,但经常有站长留言反馈同步失败,我一直觉得是代码部署问题。 最近很长一段时间,张戈...

3687
来自专栏Java后端技术栈

面试必备:如何将一个长URL转换为一个短URL?

前几天整理面试题的时候,有一道试题是《如何将一个很长的URL转换为一个短的URL,并实现他们之间的相互转换?》,现在想起来这是一个绝对不简单的问题,需要考虑很多...

2922
来自专栏北京马哥教育

Python黑科技:利用Python实现微博监控小姐姐动态

? 0x00 前言: ? 前几个星期在写一个微博监控系统 可谓是一波三折啊 获取到微博后因为一些字符编码问题 导致心态爆炸开发中断 但是就在昨天发现了另外一个...

5235
来自专栏xingoo, 一个梦想做发明家的程序员

ADX3000二层的负载均衡设计问题

我的想法是 想在现有的局域网内部,利用ADX划分出一个新的局域网,模拟负载均衡。 现在有三台试验机器,拓扑图如下: ? 各个机器IP设置如下图: 我进行了如下的...

2285
来自专栏程序员互动联盟

【答疑释惑 第十讲】如何在windows下学习linux?

疑惑一 现在手游的server 端,一般都用哪种语言开发? 业界主要的是c/c++ + Python/lua模式做游戏服务器。c/c++做网络通讯数据传输,py...

3605
来自专栏腾讯移动品质中心TMQ的专栏

30分钟轻松搞定代码瘦身

导语 当一个新的产品想要复用一个旧的产品的逻辑的时候,是直接把全盘的代码copy过去就可以了吗?站在功能的角度当然没问题,但是这对于新产品是相当臃肿的,因为一些...

2399

扫码关注云+社区

领取腾讯云代金券