监控tomcat性能实例

目录

 

1、创建一个Spring Boot程序

2、加大tomcat的最大线程数

3、使用JMeter加压

4、监控工具显示

现象:

分析:

定位问题:

概念再理解:

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

jconsole关于吞吐量的tip


1、创建一个Spring Boot程序

@RestController
public class GcTestController {
 
    @RequestMapping("/greeting/last/{seconds}")
    public Greeting greeting(@PathVariable long seconds) {
        try{
            Thread.sleep(seconds*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Greeting greeting = new Greeting("Hello world!");
        return greeting;
    }



}
class Greeting{
    private String message;

    public Greeting(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

备注:服务端程序根据请求参数中的seconds,先停顿一定时长,然后才返回请求。目的:模拟服务端延迟

2、加大tomcat的最大线程数

#修改springboot配置文件application.properties
#tomcat server可开启最大线程数
server.tomcat.max-threads=1000

3、使用JMeter加压

创建100个线程,循环次数选永远,设置HTTP请求响应timeout为1000毫秒,因为每个线程在收到响应后才会发起下一次请求。设置1000毫秒,方便JMeter以固定吞吐量加压。分以下阶段加压,第一阶段请求参数为/greeting/last/2,第二阶段请求参数为/greeting/last/6,第三阶段请求参数为/greeting/last/8

4、监控工具显示

visual vm

监控tomcat性能实例_第1张图片

jconsole

监控tomcat性能实例_第2张图片

现象:

线程逐渐增多,堆内存消耗随之增加,但cpu占用率变化不大。线程增多是因为三个阶段每个请求停留时间为2、6、8秒,JMeter有100个线程发送请求,每个请求等待一秒钟就发送第二个请求,所以三个阶段的并发量是200、600、800,各需要tomcat提供200、400、800个线程去处理迎战同时到达的请求。cpu占用率没有加大的原因,是因为服务的吞吐量没有增大。这个最后解释。

分析:

线程飙升,内存增大,cpu占用率不变,吞吐量不变,这个时候要怀疑是不是web服务依赖的下游服务出现异常,导致响应时间变长。

定位问题:

瓶颈在哪个方法呢

visual vm监控

监控tomcat性能实例_第3张图片

jconsole

监控tomcat性能实例_第4张图片

通过visual vm抽样器分析cpu的情况,我们得知是greeting方法占用大量cpu时间,greeting随着请求参数的变大,sleep时间增长,导致响应越来越慢。例如实际开发过程中,有时会遇到这样的情况,随着数据的增多,由于索引设计不合理,导致数据库服务响应时间增长,进而web服务请求响应时间增长,请求处理不过来,导致tomcat开启更多线程,但是吞吐量却没有提升。

 

概念再理解:

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

QPS(TPS):每秒钟request/事务 数量
并发数: 系统同时处理的request/事务数   
响应时间:  一般取平均响应时间
它们之间的关系:
吞吐量QPS(TPS)= 并发数/平均响应时间

所以实例中的吞吐量几乎不变得原因是,计算如下表

TPS吞吐量计算
请求参数seconds 并发数 平均响应时间
2 200 2
6 600 6
8 800 8

 

 

 

 

 

jconsole关于吞吐量的tip

MBean:maxTime每个请求最长处理时间。requestCount总共处理完成的请求数量。processingTime处理这些请求总共花费的时间。

监控tomcat性能实例_第5张图片

监控tomcat性能实例_第6张图片

你可能感兴趣的:(调优)