性能监控及测试(1)

一、性能指标

1、响应时间(Response Time:RT)

  • 响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。

2、HPS(Hits Per Second)

  • 每秒点击次数,单位是次/秒

3、TPS(Transaction Per Second)

  • 系统每秒处理交易数,单位是笔/秒

4、QPS(Query Per Second)

  • 系统每秒处理查询次数,单位是次/秒。对于互联网业务中,如果某些业务有且仅有一个请求连接,那么 TPS = QPS = HPS,一般情况下用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示对服务器单击请求。
  • 无论TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:
    • 金融行业:1000 TPS ~ 50000 TPS,不包含互联网化的活动
    • 保险行业:100 TPS ~ 100000 TPS,不包括互联网化的活动
    • 制造行业:10 TPS ~ 5000 TPS
    • 互联网电子商务:10000 TPS ~ 1000000 TPS

5、最大响应时间(Max Response Time)

  • 指用户发出请求或者指令到系统做出反应(响应)的最大时间

6、最少响应时间(Mininum Response Time)指用户发出请求或者指令到系统做出反应(响应)的最少时间

7、90%响应时间(90% Resource Time)是指所有用户的响应时间进行排序,第90%的响应时间。

总结:性能测试主要的三个指标

1、吞吐量:每秒系统能够处理的请求数、任务数
2、响应时间:服务处理一个请求或一个任务的耗时
3、错误率:一批请求中结果出错的请求所占比率

二、JMeter

  • Mac安装JMeter
brew install jmeter, 安装成功后查看版本,5.3,成功!
  • 设置语言为中文
1、/usr/local/Cellar/jmeter/5.3/libexec/bin
2、vim jmeter.properties
3、language = zh_CN
  • 启动JMeter
终端输入 jmeter

三、JMeter使用

1、添加程序组

添加程序组.png
  • 线程数:同一时间请求数
  • Ramp-Up时间(秒):多长时间执行完线程数
  • 循环次数:程序执行次数

2、HTTP请求

HTTP请求.png

3、察看结果数

察看结果数.png

4、汇总报告

汇总报告.png

5、聚合报告

聚合报告.png

6、汇总图

汇总图.png

7、测试

HTTP请求.png
汇总报告.png
聚合报告.png
汇总图.png

四、JMeter分布式系统测试

一、分布式组件

分布式组件.png

二、分布式项目测试

  • 1、Nginx测试
    Nginx测试.png
  • 2、Gateway测试
    Gateway测试.png
  • 3、简单服务
  • 简单服务
    @ResponseBody
    @GetMapping("/test")
    public String getTest() {
        return "简单服务";
    }
简单服务.png
  • 4、中间件测试
    中间件测试.png
    • 中间件越多,吞吐量越低,响应时间越长
  • 5、内存影响性能
    内存影响.png

五、性能优化

首先考虑自己的应用属于 CPU 密集型 还是 IO密集型

影响性能考虑点包括

  • 数据库
  • 应用程序
  • 中间件(Nginx、Gateway、Tomcat)
  • 网络
  • 操作系统

六、性能监控

1、JVM内存模型
JVM.png

2、程序计数器(Program Counter Register)

  • 记录的是正在执行的虚拟机字节码指令的地址
  • 此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError的区域

3、虚拟机:VMStack

  • 描述的是Java方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表,操作数栈,方法接口等信息
  • 局部变量表存储了编译期可知的各种基本数据类型、对象引用
  • 线程请求的栈深度不够会报 StackOverflowError 异常
  • 栈动态扩展的容量不够会报 OutOfMemoryError 异常
  • 虚拟机栈是线程隔离的,即每个线程都有自己独立的虚拟机栈

4、本地方法:Native Stack

  • 本地方法栈类似于虚拟机栈,只不过本地方法栈使用的是本地方法

5、堆:Heap

  • 几乎所有的对象实例都在堆上分配内存

6、堆

所有的对象实例以及数组都要在堆上分配。堆是垃圾收集器管理的主要区域,也被成为"GC堆";也是我们优化最多考虑的地方。
堆可以细分为:

  • 新生代
    • Eden 空间
    • From Survivor 空间
    • To Survivor 空间
  • 老年代
  • 永久代/元空间
    • Java8以前永久代,受jvm管理,Java8以后元空间,直接使用物理内存。因此默认情况下,元空间的大小仅受本地内存限制
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。