图解微服务的性能监控、压测和调优

作者:微信小助手

发布时间:2021-03-31T11:28:45

(给ImportNew加星标,提高Java技能)

转自:悟空聊架构

本文主要内容

1 何为压力测试


1.1 大白话解释


  • 性能压测是什么:就是考察当前软件和硬件环境下,系统所能承受的最大负荷,并帮助找出系统的瓶颈所在;

  • 性能压测的目的:为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到知己知彼,百战不殆。还可以发现内存泄漏、并发与同步的问题。


1.2 性能指标


  • RepsonseTime - RT:响应时间,用户从客户端发起一个请求开始计算,到客户端接收到服务端的响应结束,整个过程所耗费的时间;
  • Hits Per Second - HPS:用户每秒点击次数,也就是每秒向后台发送的请求次数;
  • QPS:系统每秒内处理查询的次数;
  • MaxRT:最大响应时间,指用户发出请求到服务端返回响应的最大时间;
  • MiniRT:最少响应时间,指用户发出请求到服务端返回响应的最少时间;
  • 90%响应时间:将所有用户的响应时间进行升序排序,取 90 % 的位置;
  • 性能测试关注点:
    • 吞吐量:每秒钟系统能处理的请求数、任务数;
    • 响应时间:服务处理一个请求或一个任务的耗时;
    • 错误率:一批请求中结果出过错的请求所占比例。

2 Jmeter 压测工具


2.1 Jmeter 工具


  • 下载和安装 Jmeter 工具


下载地址:


https://jmeter.apache.org/download_jmeter.cgi


我下载的版本是 apache-jmeter-5.3。

  • 运行 JMeter 程序


打开批处理文件:\apache-jmeter-5.3\bin\jmeter.bat。如下图所示:

  • 添加线程组,如下图所示:
添加线程组
  • 1s 内启动 200 个线程,循环次数 100 次。2 万个请求。如下图所示:
  • 测试 HTTP 请求,如下图所示:

配置要测试的协议、服务器地址、端口号。配置信息如下:


协议:使用 http 协议。服务器名称或 IPwww.baidu.com (只是为了演示)。端口号:80 端口。

如下图所示:


  • 添加查看结果树、汇总报告和聚合报告。如下图所示:
  • 开始压力测试。


点击播放按钮就开始启动了。注意启动之前需要先设置线程组的参数配置和 HTTP 请求的配置。如下图所示:

  • 查看每个请求结果,如下图所示:
  • 查看汇总报告。


主要关心平均值和吞吐量。200 个线程,每个线程调用 100 次,总共 2 万 次,可以看到下图中表格中的样本列也是 2 万,请求所耗费的时间是 151 ms,吞吐量是 880 个请求每秒。如下图所示:


  • 查看聚合报告。

主要看中位数和 90% 百分位,中位数是 59 ms,说明大部分请求的响应时间是 59 ms。90 % 的请求 都是在 271 ms 以内响应完成的。


异常 0.41% 说明 2 万 个请求中有 82 个请求异常(20000 * 0.0041 = 82 )。


吞吐量 880.2/sec 说明百度这个网站每秒能处理 880 个请求,性能一般(可能跟本地机器性能有关)。


如下图所示:

  • 查看汇总图。


查看汇总图时,需要先勾选想要查看的信息,如下图所示:



然后查看图形汇总:



可以看到勾选的几列在图表中是用不同颜色表示的,比如绿色的柱状条就是 90 % 百分位。


我们来测试下 PassJava(佳必过)的管理后台的性能,吞吐量接近 2000/s。如下图所示:


3 性能监控之 jconsole


jconsole 和 jvisualvm 是 Java JDK 的两个小工具,用来监控内存泄漏、跟踪垃圾回收、执行时的内存情况、对 CPU 进行分析、线程的分析。都可以通过命令行启动,而且可以监控本地和远程应用。而 jvisualvm 是升级版的 jconsole。我们先来看下 jconsole 的使用。


首先用 cmd 命令行的方式启动 jconsole。


3.1 启动 jconsole


命令行启动 jconsole


3.2 选择监控哪个应用


然后选择 passjava 项目的 question 服务。


选择 passjava-question 微服务


对应的就是下面这个微服务:passjava-question。


对应 passjava-question 微服务

3.3 概览


从监控界面上有 6 个菜单,首先看到的是概览功能,上面有堆内存使用量、线程数、类的使用情况、CPU 占用率,都是用趋势图来表示的,能很方便的看出当前性能的概览。注意:这些监控都是实时的。


概览

3.4 内存


下面是内存的使用情况,可以从下图中看到有个下拉框,里面可以选择不同的内存维度,然后下面的图标和柱状图也会跟着选择的维度而展示不同。


3.5 线程


下面是线程的使用情况,可以看到线程峰值和活动线程的总数量,目前看到的峰值是59,活动线程数是 57。下半部分可以看到具体是哪些线程,以及线程的堆栈信息,非常详细。


线程使用情况

3.6 类


下面是类的加载和卸载情况,已加载类总数是 10679,而已卸载的类是 1 个,所以当前已加装当前类的总数是 10679 - 1 = 10678 个。


类的加载和卸载情况

3.7 VM 概要


我们再来看下 VM(虚拟机)的情况。如下图所示,可以看到虚拟机情况,线程、类、堆的概要信息,以及 VM 的参数,是不是很方便呀~


VM 概要

3.8 MBean 信息


接下来我们来看下 MBean 信息。对于 MBean,可能很多同学不知道是啥,下面做个解释: