FE 堆内存故障排查
本主题描述了如何在 StarRocks 中排查 FE 堆内存问题。
堆内存分配突然上涨
您可以通过检查 StarRocks 中的 Memory Profile(或 Memory Allocation Profile)来识别导致堆内存分配激增的问题。从 v3.3.6 版本开始,StarRocks 支持将 Memory Profile 以 .tgz 格式压缩的 HTML 文件形式打印到 fe/log/proc_profile 目录下。

您可以根据内存问题发生的时间找到相应的文件,解压缩并在浏览器中打开。文件中会显示堆栈内存分配的火焰图。图中的框越宽,表示该堆栈分配的内存资源越多。例如,在下面的火焰图中,BDBEnvironment.getDatabaseNamesWithPrefix 框的宽度超过了图形的 50%,说明该函数分配的内存资源超过了一半。

如果在激增期间没有打印 Memory Profile 文件,您可以在 FE 配置文件 fe.conf 中设置以下配置项,然后重启 FE,从而禁用 CPU Profile,并将 Profile 打印间隔设置为 5 分钟。
proc_profile_cpu_enable = false
proc_profile_collect_interval_s = 300
v3.3.6 版本之前的解决方法
对于 v3.3.6 之前的版本,您可以通过脚本定期打印内存分析文件。
在 fe 目录下运行以下 Shell 脚本:
#!/bin/bash
mkdir -p mem_alloc_log
while true
do
current_time=$(date +'%Y-%m-%d-%H-%M-%S')
file_name="mem_alloc_log/alloc-profile-${current_time}.html"
./bin/profiler.sh -e alloc --alloc 2m -d 300 -f "$file_name" `cat bin/fe.pid`
done