性能诊断工具箱,助你轻松找到系统慢根因

你是否在为系统卡顿而烦恼?
你是否在面对性能问题时束手无策?
你是否为迟迟找不到性能瓶颈而沮丧?
你是否想拥有一站式傻瓜式性能诊断工具?
请卸下你的烦恼,让Monitor新特性——性能诊断工具箱来满足你的幸福感!
1 适用版本
该功能适用版本为金蝶云·苍穹V5.0.011及以上。
2 功能速览
为了解决普通用户定位性能问题根因困难的问题,Monitor为用户提供了一个性能诊断工具箱,配套有慢查询、线程监控、火焰图、性能穿透等交互式诊断工具,达到性能问题根因定位直观化、傻瓜化,降低了对用户技能的要求,从而使普通开发人员、运维人员皆可较容易、高效地定位出性能卡顿根因。
接下来,为大家逐一介绍4个交互式诊断工具。
2.1 慢查询,一键找到系统卡顿的请求
适用场景:
聚焦系统某段时间内发生了哪些慢SQL、慢WEB请求、慢RPC请求,以便有针对性地快速排障。
功能入口路径:
Monitor→【性能治理】→【慢查询】,如下图所示:

慢查询功能路径

慢查询功能界面
接下来,分别举例讲解慢SQL、慢WEB请求、慢RPC请求分析方法。
JDBC慢请求示例

JDBC慢请求
如上图,SlowLogger-JDBC表示此请求是一个慢SQL请求,且图中详细展示了SQL执行耗时、SQL语句以及执行SQL的代码堆栈信息,通过堆栈信息可以精准定位执行SQL的业务代码,开发人员结合具体业务特征优化SQL保障其性能。
WEB慢请求示例

慢WEB请求
如上图,SlowLogger-WEB表示此请求是一个慢WEB(HTTP)请求,且图中详细展示了请求总耗时、traceId、请求参数以及请求执行时调用过程的耗时统计信息。从图中可以发现,主要耗时在RpcRequest,便可进一步用traceId在日志中查询详细信息,如下所示:

TraceId查询日志
如上图,观察日志可以发现两条SQL占用总时间的70%,至此找到导致WEB请求慢的根因,开发人员可以进一步优化SQL提升性能。
RPC慢请求示例

RPC慢请求
如上图,SlowLogger-RPC表示此请求是一个慢RPC请求,且图中详细展示了请求总耗时、traceId、请求来源、调用方法、参数以及请求执行时调用过程的耗时统计信息。从图中可以发现,主要耗时在FormService,进一步可以用traceId在日志中查询详细信息如下:

RPC慢请求日志查询
观察日志可以发现,上图业务插件占用总时间的90%,至此找到导致RPC请求慢的根因,开发人员可以进一步分析优化插件业务逻辑。
2.2 线程监控,专治各种卡慢杂症
适用场景:
系统没有慢请求但是又存在卡顿,则可以通过持续观察系统所有线程状态、执行过程中统计信息、线程堆栈动态变化情况,综合分析定位出性能卡顿根因。
功能入口路径:
Monitor→【线程监控】,如下图所示:

线程监控功能入口

线程监控功能页面
如上图,根据查询条件(红框部分)查询符合条件的被监控服务器当前运行的所有线程,每个线程信息分为4部分:线程名称、线程信息、线程统计、线程堆栈。为了直观介绍如何根据线程信息定位性能问题,下面将分场景举例说明。
场景一:某线程堆栈长时间始终在运行同一个方法
通过多次点击“查询”按钮,刷新所有线程信息,观察线程运行时间及堆栈信息,发现某个线程已经长时间运行,但堆栈也没啥变化,如下所示:

线程堆栈停留
如上图,线程堆栈一直停滞在batchRequire方法,则判断该方法为卡顿地方,开发人员重点排查并优化方法代码提高性能。
场景二:通过线程堆栈统计信息定位性能根因
线程统计信息中显示了详细的运行耗时记录,通过分析线程统计信息找出性能慢的根因,线程信息如下所示:

根据线程统计信息定位性能根因
如上图,通过观察线程统计信息很容易找到导致性能慢的2条线索,线索1需要开发人员结合标注信息具体分析业务代码,线索2一次请求执行了1115次DB调用,需要开发人员具体分析是否存在循环调用SQL的不合理情况。
场景三:通过线程堆栈判断线程阻塞
线程执行过程中可能由于阻塞导致停顿造成性能慢的情况,如下图:

线程阻塞
如上图,通过观察线程堆栈很容易发现线程由于等待锁一直阻塞。
场景四:检测死锁
系统运行过程中会自动进行死锁检测,一旦发现死锁,则在顶部红色高亮显示,如下图:

自动检测死锁
如上图,会提示存在死锁,再通过观察线程堆栈列表,可以找到上图标记的2个线程发生了死锁。
2.3 火焰图,耗时方法无处藏身
火焰图能显示方法调用栈详细耗时,是性能根因分析的杀手锏,其详细知识在这不过多介绍,可参考火焰图官方网站:
适用场景:
通过其他工具无法定位到具体方法导致的性能瓶颈时,可采用火焰图进行分析。
功能入口路径:
Monitor→【性能治理】→【火焰图】,如下图所示:

火焰图功能入口
Monitor提供生成CPU耗时和内存分配2种火焰图,具体功能如下:

生成火焰图功能界面
如上图,可以针对具体服务生成不同采样时长的火焰图,采样时长越长越能准确分析性能瓶颈,默认为10秒钟,并且可选多个实例同时批量生成。
该特性对于分布式服务特别有用,因为请求具体在哪个节点执行是无法预测的也就无法判断哪个节点有问题,而批量生成火焰图可以同一时刻覆盖所有节点,确保有问题的节点也会生成火焰图。火焰图生成后可在线查看或下载后离线查看分析。
接下来,结合一个实际案例讲述如何通过分析CPU耗时火焰图找到性能慢的根因。
案例描述:一个数据量较大的验证环境,其采购入库单方案查询慢,耗时18s。
操作步骤:
1、打开火焰图管理页面,选择对应服务,类型选择“CPU耗时”,采样时长填写“30”秒,单击“确定”按钮开始生成火焰图。
2、打开Chrome浏览器,通过“F12”快捷键打开控制台切换到“Network”网络跟踪,刷新采购入库单列表,如下图可以看到向后端先后发送2个请求,耗时都
性能诊断工具箱,助你轻松找到系统慢根因
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



