当在压测过程中发现某些请求的耗时特别高时,会希望能够进一步分析是具体哪个方法耗时较高,以便可以对这个方法进行性能优化,达到使整体链路性能表现提升的效果,此时可通过方法追踪的功能进行定位。
1、开启方法追踪
要进行方法追踪,需要在压测实况的请求详情中,对方法进行「开启方法追踪」。
2、输入类名方法名
输入需要追踪的类名#方法名,点击开始追踪,系统会对此方法请求进行采样和分析,统计其下一级的所有调用子方法的耗时和所在代码行;
3、方法耗时追踪
在方法追踪页面,输入 io.shulie.app.dms.controller.user.LoginController#login 这个方法名(其他应用节点的方法名请咨询开发),点击开始追踪,稍等几秒,即可看到这个方法的平均耗时。点击方法前的加号图标,可以查看该方法的下一层方法耗时。
通过追踪可以看到io.shulie.app.dms.manage.UserManager#login这个方法耗时最大,几乎占据了所有耗时,继续点击方法前面的加号,挖掘该方法的下一层方法中哪些方法耗时最大。
可以看到io.shulie.center.user.api.service.UserService#getUserByToken和io.shulie.app.dms.manage.impl.UserManagerImpl#getPartner两个方法耗时较大,可以初步判断耗时主要在这两个方法,其中后者更大一些,我们先查看后者的子级方法耗时。
可以看到io.shulie.center.partner.api.service.PartnerBaseService#getPartnerDetailByUid这个方法的耗时非常巨大,进一步挖掘其子方法耗时。
最终发现java.lang.reflect.InvocationHandler#invoke这个方法的耗时达到了179ms,总体方法耗时445ms,可以判断该子方法在该方法中属于一个需要关注的瓶颈点,可以针对该子方法做进一步的优化。其他耗时大的节点也可以按照此方法挖掘瓶颈点。
本文来自投稿,不代表TakinTalks稳定性技术交流平台立场,如若转载,请联系原作者。