ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

性能优化与压测引擎四

2022-02-04 22:30:51  阅读:149  来源: 互联网

标签:引擎 http 压测 gatling import 日志 优化 public


性能优化与压测引擎四

gatling和arthas结合实战例子

准备一个简单的例子,说明下工作中的一个简单的找问题和优化例子,虽然简单,但是很实用。

springboot接口例子

控制器

@RestController
public class HelloController {

    @Autowired
    private Logger logger;

    @GetMapping("/hello")
    public String sayHello(){
        logger.log("hello");//日志
        return "hello";
    }
}

日志模拟

模拟一些日志框架底层,用的同步锁:

@Component
public class Logger {
    public synchronized void log(String msg){
        System.out.println(msg);
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

gatling压测脚本

放在user-files\simulations\computerdatabase下即可,压测10秒,每秒500请求,太猛的话都在一台机子上吃不消的,机器会卡死



package computerdatabase;

import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.*;

import io.gatling.javaapi.core.*;
import io.gatling.javaapi.http.*;
import java.time.Duration;

public class HttpSimulation extends Simulation {

  HttpProtocolBuilder httpProtocol =
      http
          .baseUrl("http://localhost:8090");

  ScenarioBuilder scn =
      scenario("http例子")
          .exec(http("hello").get("/hello"));

  {
    setUp(scn.injectOpen(constantUsersPerSec(500).during(10)).protocols(httpProtocol));
  }
}


开启arthas

在这里插入图片描述

开启压测后观察

发现有阻塞
在这里插入图片描述

然后用thread -b查看阻塞信息,发现确实有199个线程阻塞着,阻塞在com.example.test.demo.controller.HelloController.sayHello(HelloController.java:20)
在这里插入图片描述

也就是:
在这里插入图片描述
原来他是一个同步方法,怪不得:
在这里插入图片描述

压测报告,QPS只有90左右,延迟很严重,98%的响应时间都大于1200毫秒 :
在这里插入图片描述

问题分析

好多线程是阻塞状态,而且也看到了打日志的方法阻塞了,因为是同步方法。

解决方案

把同步关键词去掉再试试,这次结果就比较好,QPS500,也没有阻塞
在这里插入图片描述

总结

其实这个只是个简单的例子,因为多线程同步方法导致整体性能下降的问题,当然有时候还有其他的一些问题,比如你发现某个方法特别耗时,怎么办呢,你可能会想到去打日志看看时间,这个也可以,只是比较麻烦,效率不高,这个时候可以使用trace命令可以看里面的方法时间消耗:
在这里插入图片描述

比如你想看这个时候的代码我有没把同步关键词改了,怎么好像没效果,那就直接用jad
在这里插入图片描述
比如我发现一个接口结果好像不太对,我想实时看下入参和返回结果,这个时候可以用watch
在这里插入图片描述

其实还有很多,我就不一一演示了,再压测和调试的时候很有用,当然用其他方式也可以达到一样的效果,就是效率的问题,用这个工具真的可以提高效率,其实就是赚时间,就是赚钱啊,对吧。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

标签:引擎,http,压测,gatling,import,日志,优化,public
来源: https://blog.csdn.net/wangwei19871103/article/details/122786277

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有