我正在参加「掘金·启航计划」
一、简介
skywalking 的 性能剖析 能够很好地的帮我们分析出来,具体那个服务的哪段代码耗时,性能剖析默认是没有任何数据,此时需要点击一下右上角的 刷新 按钮,这样 服务 下拉列表就会展示 我们已经接入skywalking的服务。
注意的是 skywalking 8.9.1 好像只能对个单个服务进行性能剖析,且还不支持对 gateway的剖析。
二、性能剖析
2.1 新建任务
skywalking并不会主动帮我们进行性能剖析,我想大概率是因为这样会影响程序性能吧,所以我们需要新建 性能剖析任务。
注意
- 端点名称(接口)前面一定要把请求方式(GET: )加上,否者也不会被监控到。这个是个巨坑,我搞了一天才实验出来。
- 进行性能剖析的接口一定不要选用响应很快(官方中文翻译文档关于性能剖析的介绍),这样skywalking并不会采集到数据,所以我在代码故意加了下面一段。,请求一个并不存在网站,以及让线程睡眠了500ms。
@GetMapping("/testProfile")
public GoodsEntity testProfile(){
GoodsEntity goodsEntity = new GoodsEntity();
goodsEntity.setGoodsId(1);
goodsEntity.setGoodsName("iphone 14 pro max 1TB");
goodsEntity.setGoodsPrice(9999.99D);
增加线程休眠,否则skywalking无法采集到数据
try {
HttpUtil.get("https://www.youtube.com/watch?v=mfKaToAKl7k",500);
} catch (Exception e) {
log.info(e.getMessage(),e);
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return goodsEntity;
}
官方中文翻译文档关于性能剖析的介绍 也可以注意下图的说法:\
最小持续时间阈值提供了一个过滤器机制,如果给定端点的请求很快,他就不会异形,这可以确保配置的数据是预期的数据。
其实我觉得这样也是可以理解,性能剖析的目的是对项目的请求响应慢的接口剖析优化, 现在接口响应时间很快,就没有必要进行性能剖析了。我们应该把主要的开发精力放到那些响应慢的,对用户体验影响大的的接口上。这样当我们对接口进行优化后,就能得到很好的用户反馈,我们也有更有成就感。持续的正向反馈,将能够给激励我们,这样我们就可以申请更多工期,做更多的优化,给产品提供更好的用户体验。
2.2 发起请求
新建完成以后我们可以 多请求几次: http://localhost:9010/ratel-goods/goods/testProfile
我们往下翻一下分析结果不难发现,就是因为请求一个不存在的网站(根据我们项目代码包名(com.ratel.goods.controller)和耗时分析较长的步骤(堆栈分析蓝色高亮部分)可以快速定位到确实是43行)以及线程睡眠(代码的49行),所以我们整个接口的响应时间变长了。