性能测试中TPS和CPU利用率上不去的简单分析_压测cpu使用率上不去_徒步@天涯的博客-程序员秘密

技术标签: java  后端  

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

压测中Vuser增加,TPS上不去,意味着Response Time在增加,需要找出响应时间增加的原因:

1、网络带宽

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

2、连接池(重点关注)

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

3、垃圾回收机制

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

4、数据库配置

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

5、通信连接机制

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

6、硬件资源

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

7、压力机

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

8、压测脚本

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

9、业务逻辑

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

10、系统架构

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

PS:性能瓶颈分析不能单从局部分析,要综合起来,多维度分析问题原因。

从目前测试来看,重点关注第二点和第九点(如:和数据库交互过多,一个交易需要查询、更新数据库数十次等等)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bobocqu/article/details/120895469

智能推荐

一步搞懂镜像文件_如何辨认镜像文件_愚昧之山绝望之谷开悟之坡的博客-程序员秘密

常见的镜像文件格式主要有:.iso、.bin、.nrg、.vcd、.cif、.fcd、.img、.ccd、.c2d、.dfi、.tao、.dao和.cue 等。每种刻录软件支持的镜像文件格式都各不相同,比如说Nero支持.nrg、.iso和.cue,Easy CD Creator支持.iso、.cif,CloneCD支持.ccd等。在虚拟光驱中我们需要加入镜像文件(相当于一个游戏光盘),才能够顺利完成游戏的安装,完成安装之后再载入这个镜像就可以进入游戏当中了。标准 ISO 镜像文件 *.iso。

arduino pro mini 迷你 ATmega328P 程序下载 usb-ttl reset_atmega328p程序下载_qq513283439的博客-程序员秘密

借助于 uno 成功烧写 pro mini ,但是可怜的是每次要把直插的328p拔下来就不出现avrdude: stk500_getsync(): not in sync: resp=0x00mini-UNO(RX)-(RX)(TX)-(TX)vcc-5vgnd-gndreset(DTR也可以)-reset将IDE上板子的选择改为:Arduino p

Arduino开发之Analog Sound Sensor_枫★曦的博客-程序员秘密

环境搭建:1. Arduino UNO R3开发板,2. Arduino IDE。我这里使用的是1.8.3。可以在https://www.arduino.cc/en/Main/Software下载并安装。安装好之后,桌面会有如下图标。示例开发:1.连接设备。本例中我们以Analog Sound Sensor(DFR0034)并结合DF

基于Servlet的MVC模式(使用JSP,Servlet,JavaBean实现MVC)_haha_7的博客-程序员秘密

MVC模式1.MVC概念MVC是模型(model),视图(view),控制器(controller)的缩写,分别代表Web应用程序中的3种指责。模型:用于存储数据以及处理用户请求的业务逻辑视图:向控制器提交数据,显示模型中的数据控制器:根据视图提出的请求,判断将请求和数据交给那个模型处理,处理后的有关结果交给那个视图更新显示2.基于Servlet的MVC模式模型:一个或多个JavaBean对象,用于存储数据(实体模型,由JavaBean类创建)和处理业务逻辑(业务模型,由一半的Java类创建)

【长更】C语言经典面试之编程总结(自己整理总结+实验验证)_daemon_eintr的博客-程序员秘密

1、考察指针偏移和栈的知识2、大小端问题导致的输出不确定char c ;int i;i = c = -125 ; printf("%d \n " , i ) ; A:一定输出-125B:一定不能输出-125C:可能输出-125 // 正选D:输出%d解答:本题乍一看,输出-125! 再仔细一看 char类型表示范围是-128~127之间,也没有溢出。但其实这...

$.proxy的使用_{[email protected]}_Orange_xyb的博客-程序员秘密

1、$.proxy 方法接受一个已有的函数,并返回一个带特定上下文的新的函数。有两种语法:语法1:$(selector).proxy(function,context)                      语法2:$(selector).proxy(context,name)参数:function要被调用的已有的函数。context

随便推点

Oracle数据库(四)函数的介绍_oracle jebctype_长弓晗炅的博客-程序员秘密

1、聚合函数的使用:函数 说明--------------------------------------------------------------------avg(x) 返回 x 的平均值--------------------------------------------------------------------count(x) 返回一个包含 x 的查询返回的行数------------------------------------------------

ssk-keygen + ssh-copy-id 无密码登陆远程LINUX主机_ssk copy id_洪流之源的博客-程序员秘密

使用下例中ssk-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。 ssh-keygen 创建公钥和密钥。 ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。ssh-copy-id 也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.ViewPager"_远洪的博客-程序员秘密

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.ViewPager"今天在导入项目的时候遇到了这个异常解决 方法如下:右键项目  ——》Build  Path  ———》  config  and  BuildPath———》source———》add

arcgis批量excel数据转点_arcgis用excelbatch_八千鸟羽的博客-程序员秘密

首先是做model builder注意该流程是用每一个表格中的我设的id字段来命名每个点文件,防止都是一样的名字然后覆盖掉,此外这里的New指的我输出文件夹名字为New,%Value%是中间输出文件名,表示之前从id字段中提取的值。将流程保存为model2。batch的话文件一多就死机了。Python运行Python代码。# -*-coding:utf-8-*-import osi...

(转) Graph-powered Machine Learning at Google_a1424262219的博客-程序员秘密

Graph-powered Machine Learning at GoogleThursday, October 06, 2016Posted by Sujith Ravi, Staff Research Scientist, Google ResearchRecently, t...

推荐文章

热门文章

相关标签