您可以查看运行中作业的性能,包括Job Manager与运行Task Managers的CPU、内存和线程的使用情况,这可以协助您定位代码问题,例如作业代码是否存在问题、个别类是否初始化比较慢、个别类是否占用资源比较多等问题。本文为您介绍如何查看作业Job Manager和运行Task Managers的性能。
前提条件
其他阿里云账号或RAM用户共同使用Flink工作空间时,需要为阿里云账号或RAM用户授权,以进行查看作业性能等相关操作,详情请参见项目空间授权。
使用限制
仅Flink计算引擎VVR 4.0.11及以上版本支持查看作业性能。
仅支持查看运行作业的性能,历史作业不支持查看性能。
分析工具使用方式
火焰图
火焰图通常是基于采样数据生成,可能无法完全反映程序的全部执行情况。使用火焰图识别瓶颈时,应结合其他性能分析工具和实际的业务场景进行综合判断。通常您可以查看以下方面:
CPU耗时:通常顶层占据宽度比较大的函数消耗的CPU比较多,表示该类函数可能存在性能问题。
内存分配:查看不同类别分配的内存情况。
锁耗时:查看锁竞争、死锁导致的性能下降问题。
ITimer:在相同时间间隔下,查看每个间隔内所有线程之间CPU的消耗情况。
通过火焰图识别瓶颈的整体思路如下:
理解火焰图的结构
火焰图的每一层代表调用栈的一个级别。最底层是应用程序的入口点,而更高层则表示更深层次的函数调用。
关注火焰的宽度与出现频率
在火焰图中,每个“火焰”的宽度代表了函数在采样期间的执行时间占比,更宽的火焰表示该函数占用了更多的CPU时间,这通常代表了潜在的性能瓶颈。有些函数的火焰可能不是最宽的,但如果它们频繁出现在火焰图中,这意味着它们被调用了很多次,累积起来也是一个性能问题。
分析火焰的位置
火焰图的垂直位置可以告诉您瓶颈发生在调用栈的哪个级别。位于底部的宽火焰通常表示程序的早期阶段或主要逻辑部分存在问题,而位于顶部的宽火焰可能指向具体的处理函数或库函数。
结合实际代码分析
一旦您通过火焰图识别出了潜在的瓶颈,应该结合实际的代码进行分析,查看这些热点函数的实现,寻找可以优化的地方,比如减少循环次数、优化数据结构、减少同步操作等。
进行性能测试
优化代码后,可以进行性能测试验证优化效果。并比较优化前后火焰图的变化,确保性能瓶颈得到了实质性的改善。
如果火焰图中部分显示UnKnown,说明您使用了native方法。因此没有Java方法的名字是符合预期的,详情请参见Unknown。
线程动态
进入性能查看页签。
Job Manager性能
在作业日志页签,单击Job Manager页签下的性能查看。
运行Task Managers性能
在作业日志页签,单击运行Task Managers页签下的Path, ID,单击性能查看。
在线程动态页签,单击目标算子操作列的采样,采样一段时间后观察其线程栈。例如下图为Gemini State访问的线程栈。
Thread Dump
在作业日志页签,单击运行Task Managers页签下的Path, ID。
在Thread Dump页面,按算子名称搜索,观察线程栈是否在访问State(线程栈持续在Gemini或RocksDB的访问链路上)。
您可以在状态总览页签查看目标算子名称。
相关文档
作业智能诊断服务能够帮您监控作业健康状况,全面保障您的业务稳定可靠运行,详情请参见作业智能诊断。
通过作业配置和Flink SQL优化两方面提升Flink SQL作业性能,详情请参见高性能Flink SQL优化技巧。