【进阶用法】性能分析-方法追踪

当在压测过程中发现某些请求的耗时特别高时,会希望能够进一步分析是具体哪个方法耗时较高,以便可以对这个方法进行性能优化,达到使整体链路性能表现提升的效果,此时可通过方法追踪的功能进行定位。

1、开启方法追踪

要进行方法追踪,需要在压测实况的请求详情中,对方法进行「开启方法追踪」。

ForceCop 快速入门
压测实况-查看请求详情
ForceCop 快速入门
请求详情-开启方法追踪

2、输入类名方法名

输入需要追踪的类名#方法名,点击开始追踪,系统会对此方法请求进行采样和分析,统计其下一级的所有调用子方法的耗时和所在代码行;

ForceCop 快速入门
输入类名、方法名

3、方法耗时追踪

在方法追踪页面,输入 io.shulie.app.dms.controller.user.LoginController#login 这个方法名(其他应用节点的方法名请咨询开发),点击开始追踪,稍等几秒,即可看到这个方法的平均耗时。点击方法前的加号图标,可以查看该方法的下一层方法耗时。

ForceCop 快速入门
查看耗时方法

通过追踪可以看到io.shulie.app.dms.manage.UserManager#login这个方法耗时最大,几乎占据了所有耗时,继续点击方法前面的加号,挖掘该方法的下一层方法中哪些方法耗时最大。

ForceCop 快速入门
查看子方法耗时

可以看到io.shulie.center.user.api.service.UserService#getUserByToken和io.shulie.app.dms.manage.impl.UserManagerImpl#getPartner两个方法耗时较大,可以初步判断耗时主要在这两个方法,其中后者更大一些,我们先查看后者的子级方法耗时。

ForceCop 快速入门
查看子方法耗时

可以看到io.shulie.center.partner.api.service.PartnerBaseService#getPartnerDetailByUid这个方法的耗时非常巨大,进一步挖掘其子方法耗时。

ForceCop 快速入门
定位到耗时主要原因

最终发现java.lang.reflect.InvocationHandler#invoke这个方法的耗时达到了179ms,总体方法耗时445ms,可以判断该子方法在该方法中属于一个需要关注的瓶颈点,可以针对该子方法做进一步的优化。其他耗时大的节点也可以按照此方法挖掘瓶颈点。

发布者:shulieNews,转载请注明出处:数列科技

发表评论

登录后才能评论
添加【小树】企业微信即可免费申请产品试用!还在等什么?