暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Apache Doris】FE CPU 异常分析速通指南

一臻数据 2024-12-09
563

更多趣文请关注一臻数据

如果,你的Doris集群突然表现异常,FE的CPU使用率莫名飙升,而这个问题却像捉迷藏般难以在测试环境中重现。在这个紧要关头,你需要一个可靠的"侦探工具"来破解这个性能之谜。 

本文将为你介绍JVM性能分析的一把利器——jstack,看似简单的命令行工具,却能帮你揭开Java线程的神秘面纱...

背景

Doris集群的角色分为FE和BE。在存储层面FE负责存储和维护集群的元数据。在计算方面FE负责接收和解析用户的查询请求,规划查询计划,调度查询结果。BE负责数据的主要存储和计算,以及根据FE生成的物理执行计划,然后进行分布式查询。

因此对于Doris来说其实主要的内存和CPU的使用主要集中在BE,但是实际运行环境中偶尔也会出现有的同学线上FE环境出现CPU使用过高的问题。并且这种情况可能只出现在线上特点的环境上,想要线下复现难度很大,这个是时候就需要我们通过对线上FE进程的CPU使用情况进行分析和定位问题,同时也适用于FE执行慢或者卡住等问题的排查。

因为FE是基于Java编写的,那么问题就变为如何对FE的JVM进程的CPU使用进行分析的问题。JVM内存分析工具比较多,这里介绍最常用jstack的使用方式。

基于jstack进行FE线程分析

jstack是堆栈跟踪工具,一般用于查看某个进程内线程的情况。比较典型的应用是分析占用CPU时间最多的代码块,具体步骤如下:

1. 进行进程号查询

执行ps -ef|grep FE 或者直接jps 命令查看该FE应用进程号,可以看到结果为4108340。

2. 确定CPU 占用率高的线程

执行“top -Hp 4108340” 打开TOP视图,然后在线程视图中按 P 键,按照 CPU 使用率降序排列线程,找出 CPU 占用率高的线程。我们以4112817号线程测试。

3. 线程 ID 转换为十六进制

上图中的线程 ID 是以十进制显示的,而 Java 中的线程 ID 是以十六进制显示的。你可以使用 printf 命令将线程 ID 转换为十六进制。

[liyuanyuan@VM-10-6-centos ~]$ printf "%x\n" 4112817

4. jstack定位问题

使用jstack定位问题,执行“ jstack 4108340  |grep 3ec1b1 -A 27”命令过滤出进程4108340上线程3ec1b1中的线程调用栈情况,这样便快能定位到占用CPU时间最长的代码块。(附图是测试,无实际问题)

结语

如果线上分析时间有限,也可以通过jstack 4108340 > fe.jstack.log命令将进程号为4108340的FE进程的栈信息保存起来后续分析。

jstack 4108340 > fe.jstack.log

有遇到FE CPU异常可以先按照这个思路去排查下,或者收集下 jstack 给到Doris社区同学协助分析。

下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!



一臻数据致力于大数据AI时代的前沿内容分享,会持续分享更多有趣有用有态度的知识。同时也欢迎大家投稿,共建共进,帮助圈友们冲破认知壁垒,实现自我提升!

另外,整理了份《一臻数据知识库》,其中包含 Apache Doris  Data+AI 的学习资料、学习课程、白皮书、研究报告、行业标准  实践指南 等内容,会持续更新,欢迎关注公众号,免费领取

资料获取 🔗 欢迎扫描下方二维码图片 备注【Doris】免费领取❗️



往期推荐

走进开源,拥抱开源

大数据平台开发规范示例

大数据仓库开发规范示例

大数据质量管制规范示例

Flink CDC 1.0至3.0回忆录

【Apache Doris】Manager 极致丝滑地运维管理

【Apache Doris】如何一键实现MySQL万表整库同步?

【Apache Doris】如何实现高并发点查?(原理+实践全析)

为什么Apache Doris适合做大数据的复杂计算,MySQL不适合?

如何正确地使用ChatGPT(角色扮演+提示工程)

超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)

 

点击下方蓝字关注一臻数据

文章转载自一臻数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论