性能优化与压测引擎四
2022/2/4 23:22:32
本文主要是介绍性能优化与压测引擎四,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
性能优化与压测引擎四
- gatling和arthas结合实战例子
- springboot接口例子
- 控制器
- 日志模拟
- gatling压测脚本
- 开启arthas
- 开启压测后观察
- 问题分析
- 解决方案
- 总结
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:
其实还有很多,我就不一一演示了,再压测和调试的时候很有用,当然用其他方式也可以达到一样的效果,就是效率的问题,用这个工具真的可以提高效率,其实就是赚时间,就是赚钱啊,对吧。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。
这篇关于性能优化与压测引擎四的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13怎么通过 JavaScript 或其他编程语言来实现监听屏幕高度变化功能?-icode9专业技术文章分享
- 2024-11-12聊聊我们那些年用过的表达式引擎组件
- 2024-11-12让项目数据更有说服力:五款必备数据可视化管理工具推荐
- 2024-11-12人到一定年纪,要学会远离多巴胺
- 2024-11-12解读:精益生产管理的目的是什么?如何操作?
- 2024-11-12Sku预研作业
- 2024-11-12文心一言API密钥:分步申请指南
- 2024-11-12初学者指南:轻松掌握后台交互
- 2024-11-12从零开始学习:封装基础知识详解
- 2024-11-12JSON对象入门教程:轻松掌握基础用法