常见问题
安装或启动时踩过的已知问题。Docker / K8s 日常操作见 Docker 运维、Kubernetes 运维。
Doris FE 启动失败:CgroupInfo.getMountPoint() NPE
现象
ai-apm-doris-fe 起不来,日志里有:
Caused by: java.lang.NullPointerException: Cannot invoke "jdk.internal.platform.CgroupInfo.getMountPoint()" because "anyController" is null
at java.base/jdk.internal.platform.cgroupv2.CgroupV2Subsystem.getInstance(CgroupV2Subsystem.java:81)常见于 Ubuntu 24.04、较新内核(如 6.12+)、Docker 27/28、cgroup v2 环境。BDB JE 初始化时会读 JVM 的 OS/容器指标,这里炸掉后 FE 整进程退出。
原因
这是 JDK 读 Linux cgroup v2 失败,不是 DataBuff 业务代码。官方镜像 apache/doris:fe-4.1.1(以及目前最新的 fe-4.1.3)自带 BiSheng OpenJDK 17.0.11,fe.conf 的 JAVA_OPTS_FOR_JDK_17 没有关掉容器探测。换到 fe-4.1.3 修不了——官方 issue #56784、#60536 是过期关闭,没有合进发版。
处理
在 JAVA_OPTS_FOR_JDK_17 开头加上 -XX:-UseContainerSupport。关掉容器探测后,JVM 不再按 cgroup 自动算堆,必须继续保留 compose / manifest 里已有的 -Xmx patch(Docker 安装默认 1200m,本地开发 compose 为 512m)。
Docker:改 docker-compose.yml 里 FE 的 command(在改堆内存的 sed 之后、exec bash init_fe.sh 之前):
command:
- |
sed -i 's/-Xmx8192m/-Xmx1200m/g' /opt/apache-doris/fe/conf/fe.conf
sed -i 's/-Xms8192m/-Xms1200m/g' /opt/apache-doris/fe/conf/fe.conf
grep -q 'UseContainerSupport' /opt/apache-doris/fe/conf/fe.conf \
|| sed -i 's/^JAVA_OPTS_FOR_JDK_17="/JAVA_OPTS_FOR_JDK_17="-XX:-UseContainerSupport /' /opt/apache-doris/fe/conf/fe.conf
exec bash init_fe.sh本地开发 deploy/local/docker-compose.yml 同样加这两行 grep / sed,堆内存仍用原来的 512m。
已经在跑的环境:直接改容器内配置后重启:
docker exec ai-apm-doris-fe sed -i \
's/^JAVA_OPTS_FOR_JDK_17="/JAVA_OPTS_FOR_JDK_17="-XX:-UseContainerSupport /' \
/opt/apache-doris/fe/conf/fe.conf
docker restart ai-apm-doris-fe若 fe.conf 里已经有 UseContainerSupport,不要再追加一遍。
K8s: deploy/k8s/manifests/doris.yaml 里 FE 容器启动脚本,同样在改 -Xmx 之后、exec bash init_fe.sh 之前加上面那两行 grep / sed。
验证
docker logs ai-apm-doris-fe 2>&1 | tail -50
# 不应再出现 CgroupInfo.getMountPoint / anyController is null
docker exec ai-apm-doris-fe grep JAVA_OPTS_FOR_JDK_17 /opt/apache-doris/fe/conf/fe.conf
# 应包含 -XX:-UseContainerSupportFE 健康后,8030 / 9030 可探活,ingest / web 才能起来。