【ApiHelp】是基于JAVA环境的自主研发工具,主要功能是针对研发区API开发提交以及API性能监控和评估,目前已使用于本公司开发环境API性能分析中,辅助API性能优化工作。后续将该工具从设计、架构、技术、以及最终代码实现进行分享记录。
目前就是针对JAVA web项目,以及windows操作系统使用。
对于WEB企业的研发,大多都是从事与API的研发工作。面对业务复杂且一次次的迭代,API会变得越来越臃肿,如果研发初期没有做好性能规划,对于后续的性能优化和维护工作,简直可以说是惨不忍睹。本人之前接到很多公司的应用API的性能优化工作,面对上千行业务逻辑代码,以及融入不同同事风格后,简直望而却步,无从下手。面对像这种的API,性能优化工作就要面对以下问题,第一,需要从头了解API业务逻辑,结果代码清楚内部基础实现逻辑和链路结构。第二,在没有外界工具的支持下,只能盲目的去判断或者手动去测试导致性能底下的逻辑点。第三、性能优化的手段。当然,个人觉得性能优化工作往往更多的时间是消耗在问题定位上。面对像这样API代码的那种心态,我不想再过多的描述了,就是恶心啊。
既然如此,与其自己恶心,不如大家一起来恶心0_0! 所以我准备研发一个工具,其核心用于监控API和分析API性能损耗点,如果能更方便定位到API性能损耗点,就可以更效率去进行优化工作,到了这一步,优化工作就可以让大家一起处理了。
现在简单介绍下ApiHelp的性能监控和分析的功能(以在本公司使用):(其他功能暂不介绍)
【界面】:
追踪路径:用于限制jvm内需要监控的class,也就是在改目录下的class会被进行监控,目的是为了避免那些不必要的内容也被监控上,影响效率的同时也妨碍分析。
忽略目录:顾名思义就是在追踪路径下需要忽略监控的路径。
展开层级:用于控制追踪链路默认展开的层级。
屏蔽内部类:屏蔽追踪路径中的内部类的展示。
全部显示:默认追踪路径中,只会对于性能存在问题的方法显示更多信息,勾选后,会对所有链路方法展示。
【演示】:
应为该工具是针对公司架构性的,所以部分配置可能对于其他架构的项目,需要进行修改。后续会介绍,当前针对本公司,项目架构进行演示介绍。
1、填写追踪路径 以及 忽略目录。(可以针对不同项目进行修改)
以上是我的项目结构。
2、开启监控(默认配置识别当前项目的jvm类型,可以修改)
开启监控后,ApiHelp会自动识别对应配置的vm。监控开始失败会有提示,开启成功也会在控制台进行提示,于此同时也可在项目中进行查看:
看到这样的日志,表示监控成功开启。
3、API调用监控
在完成监控开启之后,就可以进行性能API的调用了,可以通过postman或者相关的软件进行API调用。调用成功之后,点击【日志分析】查看监控分析结果:
其他内容就不介绍了,这里主要介绍下链接追踪的内容:
链接追踪:展现的是当前API执行过程中,所有的业务方法链路,自动屏蔽了vm相关的方法。
链路为tree结构,上下顺序代表执行顺序,层级关系为API内部调用。:
属性介绍:
方法耗时:当前方法执行耗时,单位ms。
占比:当前方法执行时间占总耗时比例。
SQL:当前方法执行sql次数以及总耗时。【SQL 2f · 100ms 】2次调用耗时100ms
HTTP:当前方法调用外部api次数以及总耗时。【HTTP 2f · 100ms 】
风险等级:当前API性能风险等级,分为Minor、Major、Critical
异常抛出:当前方法若抛出异常,则会显示该标签内容。
以上就是简单介绍了ApiHelp工具的功能,通过trace视图,我们可以很清楚定位到当前API的一些性能问题。
作用优点:
1、相关分析结果视图话,可以更方便的了解API内容调用链路过程,方便对API的理解。
2、可以更简单的判断该API是否存在过多的循环调用问题,导致的性能底下哎。
3、可以更简单的判断是否存在过多或者慢外部调用或者sql问题。
4、可以通过前后内存情况,分析当前API是否有过大的内存消耗和GC相关问题。
5、CPU消耗,可以组略的了解当前API的一个cpu占用情况。(利用进程cpu占用计算方案,后续介绍,目前用于粗略评估,有偏差)
这边就先介绍这么多了,后续会对ApiHelp工具进行更详细的分享,源码git:https://gitee.com/cmmjxh/ApiHelp。