大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载自 Flink 1.19 起Flink 通过 Web UI 集成了 async-profiler 为主体结合仓库中的 REST 配置项、ProfilingService实现与 Web Dashboard 源码完整讲解该功能的启用方法、五种剖析模式的差异、Web UI 操作流程、结果文件管理以及常见故障排查帮助你快速定位生产环境中的 CPU、锁竞争、内存分配等性能瓶颈。功能概览与工作原理Flink Profiler 是一个**可选opt-in**的实验性功能。其核心工作链路位于 ProfilingService.java用户在 Web UI 上发起剖析请求后前端通过 REST API 将duration时长秒与mode剖析模式提交给 JobManager 或对应 TaskManager 的 REST Handler后端调用AsyncProfiler.getInstance().execute(start,eventmode)启动剖析剖析时长到期后ProfilingFuture中的定时任务flink-profiling-service单线程调度器触发stop,file输出路径停止剖析并写出结果文件结果以 HTML 文件形式存储用户可直接在 Web UI 上点击链接下载查看。该服务以单例形式运行同一时刻每个组件只允许存在一个运行中的剖析实例若在剖析未结束时再次发起请求requestProfiling会直接返回异常提示见 ProfilingService.java。从源码结构看剖析请求链路覆盖了 REST 消息定义ProfilingRequestBody、HandlerJobManagerProfilingHandler 与 TaskManagerProfilingHandler以及 ResourceManager 到 TaskExecutor 的 RPC 转发前后端闭环完整。启用 Profiler相关配置详解任何测量过程本身都会不可避免地影响被测量对象。为了防止对生产环境造成意外影响Profiler 默认是关闭的需要显式开启。在 Flink 配置文件conf/flink-conf.yaml中设置rest.profiling.enabled: true建议在开发与预生产环境启用若要在生产环境使用应将其视为实验性功能并谨慎评估影响。围绕该功能RestOptions.java 中还定义了以下可调参数均归属Expert REST配置分区配置项类型默认值说明rest.profiling.enabledBooleanfalse启用实验性 Profiler 功能即本功能的开关rest.profiling.history-sizeInteger10JobManager 或每个 TaskManager 维护的最大剖析历史实例数超过后按滚动策略移除最旧实例rest.profiling.duration-maxDuration300 s单次剖析请求允许的最大时长超过该值的请求将被拒绝rest.profiling.dirStringjava.io.tmpdir系统临时目录剖析结果文件的存储目录时长上限的强制校验REST Handler 在收到剖析请求时会先校验duration是否满足0 duration rest.profiling.duration-max不满足则直接抛出IllegalArgumentException见 TaskManagerProfilingHandler.java。Web UI 前端默认提供 30 秒的初始时长步进 30 秒最小值 1 秒。历史与结果文件管理ProfilingService用ArrayDequeProfilingInfo按组件resourceID维护剖析历史当队列长度超过rest.profiling.history-size时会通过rollingClearing删除最旧的输出文件以回收磁盘空间见 ProfilingService.java。输出文件命名格式为resourceID_mode_yyyy-MM-dd_HH_mm_ss.html见 ProfilingService.java因此可依据文件名直观判断剖析对象、模式与时间。支持的剖析模式Profiler 支持五种事件模式对应 ProfilingInfo.java 中的枚举CPU / ALLOC / LOCK / WALL / ITIMER内部通过name().toLowerCase()转为 async-profiler 的event参数。各模式语义如下CPU收集包含 Java 方法、native 调用、JVM 代码和内核函数的调用栈采样。适用于定位 CPU 密集热点。Allocation分配剖析模式下每条调用栈的栈顶帧为被分配对象的类计数器为堆压力分配的 TLAB 或 TLAB 之外对象的总大小。适用于定位内存分配热点与高频对象创建。Wall-clockWall-Clock 模式让 async-profiler忽略线程状态每隔固定周期对所有线程Running、Sleeping、Blocked一视同仁地采样。例如可用于剖析应用启动阶段的时间开销。Lock锁剖析模式下栈顶帧为锁/监视器lock/monitor的类计数器为进入该锁/监视器所花费的纳秒数。适用于定位锁竞争与阻塞问题。ITIMER当无法使用perf_events时可回退到 ITIMER 模式。它与 CPU 模式类似但不要求perf_events支持缺点是没有内核栈轨迹仅能看到用户态调用栈。平台要求由于 Profiler 由 async-profiler 驱动其运行平台必须受 async-profiler 支持官方维护的构建其他可用移植版本Linuxx64、arm64x86、arm32、ppc64le、riscv64、loongarch64macOSx64、arm64在上述清单之外的平台上进行剖析会失败错误信息会显示在剖析列表的Message列中。通过 Flink Web UI 使用 ProfilerFlink 用户可以完全通过 Web UI 完成剖析的提交与结果导出操作便捷定位目标组件在 Flink Web UI 中找到存在性能瓶颈的候选 TaskManager / JobManager切换到对应的组件详情页Profiler标签页。Web Dashboard 中对应的页面组件分别为 task-manager-profiler.component.html 与 job-manager-profiler.component.ts。创建剖析实例点击Create Profiling Instance按钮即可提交一个指定时长与模式的剖析实例。表单中可选择Profiling Duration剖析时长秒前端默认为 30步进 30最小 1受后端rest.profiling.duration-max上限约束Profiling ModeCPU / Lock / Wall-Clock / Allocation / ITIMER 五种模式下拉选择将鼠标悬停在对应模式上会显示该模式的语义说明tooltip 文案与官方文档一致见 task-manager-profiler.component.html。下载结果剖析实例完成后在剖析列表中点击结果链接即可下载交互式 HTML 文件火焰图可离线放大、检索与定位热点调用栈。剖析列表以表格形式展示每行包含Index、Trigger Time触发时间、Finished Time完成时间、Profiling Duration、Mode、Status、Link结果文件下载链接、Message状态信息等字段见 task-manager-profiler.component.html。剖析实例的状态机定义在 ProfilingInfo.java 中RUNNING剖析进行中此时 Web UI 会拒绝再次创建实例前端提示 Please wait for last profiling finished.FINISHED剖析成功Message为 Profiling SuccessfuloutputFile指向可下载的结果文件FAILED剖析失败Message携带具体失败原因如启动/停止剖析失败的错误响应。若功能未启用rest.profiling.enabled为 falseProfiler 页面会显示警告横幅提示需要先设置该配置见 task-manager-profiler.component.html。Troubleshooting常见故障排查1. CPU 模式剖析失败No access to perf events. Try --fdtransfer or --all-user option or sysctl kernel.perf_event_paranoid1该错误表示perf_event_open()系统调用失败。默认情况下Docker 容器会限制对perf_event_open系统调用的访问。推荐解决方案回退到 ITIMER 剖析模式。它与 CPU 模式类似但不要求perf_events支持代价是没有内核栈轨迹。2. Allocation 模式剖析失败No AllocTracer symbols found. Are JDK debug symbols installed?分配剖析需要 OpenJDK 调试符号debug symbols。请参考 async-profiler 官方文档中 Installing Debug Symbols 一节安装对应 JDK 的调试符号后重试。更多异步剖析器自身的异常场景可参考 async-profiler 官方文档的 Troubleshooting 页面可通过 Web UI Profiler 页面的信息图标链接直达 async-profiler 的 Wiki。实践建议先验证再上生产Profiler 是实验性功能务必先在开发/预生产环境验证其对业务的影响与结果质量再决定是否在生产启用优先 CPU 与 Wall-clock大多数性能问题先用 CPU 模式定位计算热点启动耗时类问题如作业启动、恢复阶段改用 Wall-clock 模式更合适锁问题用 Lock 模式当怀疑线程阻塞、锁竞争时Lock 模式能直接给出进入锁/监视器耗时最大的调用栈内存热点用 Allocation 模式定位高频对象分配时使用同时注意确保 JDK 调试符号已安装容器环境注意权限Docker/Kubernetes 等容器化部署默认限制perf_event_open可直接采用 ITIMER 模式规避管理好结果目录关注rest.profiling.dir指向的磁盘空间与rest.profiling.history-size的滚动清理策略避免长时间高频剖析导致结果文件堆积。通过以上配置、操作与排查手段你可以在不重启集群的前提下对 Flink 的 JobManager 与 TaskManager 进行细粒度的在线剖析快速定位 CPU、锁、分配与时钟相关的性能瓶颈。赞分享大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载相关推荐Flink Web UI 交互式 Profiler 使用指南基于 async-profiler 剖析 JobManager / TaskManagerFlink Web UI 交互式 Profiler 使用指南基于 async profiler 剖析 JobManager / TaskManager 自 F大数据流处理批处理数据工程Apache Spark JVM Profiler 插件基于 Async Profiler 的 Executor/Driver 代码剖析实战指南Apache Spark JVM Profiler 插件基于 Async Profiler 的 Executor/Driver 代码剖析实战指南 本文围绕 A大数据数据分析批处理流处理机器学习图计算Arthas profiler 命令实战指南基于 async-profiler 的火焰图与性能分析Arthas profiler 命令实战指南基于 async profiler 的火焰图与性能分析 导读 profiler 是 Arthas 提供的性能分析命开发工具可观测性调试器性能剖析上一篇XMRig v6.x 版本演进全景解读从 RandomX v2、RISC-V 支持到 GhostRider 的统一 CPU/GPU 挖矿技术路线图下一篇PyTorch语义分割配置文件解析JSON格式的完整参数说明指南 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考