[Bug] HStore Server image (`hugegraph/server`) keeps crash diagnostics only inside the container, so a restart on Kubernetes loses them
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 52/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
調査の方向性
Start with Dockerfile-hstore and compare it with the standalone Dockerfile, then inspect log4j2.xml and hugegraph-server.sh at the referenced lines; docker-entrypoint.sh shows how JAVA_OPTS reaches the script. Check docker/README.md for the deployment documentation. Done means startup diagnostics reach Kubernetes stdout, WARN-level errors from the named loggers do too, JVM crash files use the logs directory, and that directory is documented for mounting.
索引モデルが issue の本文から書いたものです。
説明
Bug Type (问题类型)
server status (启动/运行异常)
Before submit
- I have confirmed and searched that there are no similar problems in the historical issue and documents
Searched open and closed issues and PRs for hs_err, ErrorFile, HeapDumpPath, additivity, STDOUT_MODE, Dockerfile-hstore, docker logs, kubectl logs and Starting HugeGraphServer failed. #2979 / #2980 wired the console appender and set STDOUT_MODE=true in hugegraph-server/Dockerfile (the standalone hugegraph/hugegraph image), but not in hugegraph-server/Dockerfile-hstore, which builds hugegraph/server (docker/README.md:240). #3203 hit the same wall during a cold-start failure but tracked the retry bug, not the logging.
Environment (环境信息)
- Server Version:
hugegraph/serverimages. 2026-09-10: publishedlatest(built 2026-09-08) and images built from master60c8803d(#3203). 2026-09-22: images built from master83ef9f3. All line numbers below are from master176fb56dd(2026-10-02). - Backend: hstore, 3 PD + 3 Store + 3 Server
- OS: Kubernetes (kind), HugeGraph Helm chart (#3218, earlier #3132)
- Data Size: empty (2026-09-10) or a few test writes (2026-09-22); the failure is at Server startup
Expected & Actual behavior (期望与实际表现)
Observed. In the 2026-09-10 run (#3203), kubectl logs --previous for a Server that exited during startup ended with these lines and held no stack trace:
Connecting to HugeGraphServer (http://0.0.0.0:8080/graphs)...........Starting HugeGraphServer failed
See /hugegraph-server/logs/hugegraph-server.log for HugeGraphServer log output.
(printed by util.sh:362 and start-hugegraph.sh:117). The second line is the non-STDOUT_MODE branch. The cause was in logs/hugegraph-server.log, which went away with the container; the trace in #3203 was only recovered by mounting a volume at /hugegraph-server/logs before the first boot. On 2026-09-22 one Server started during a helm upgrade exited once with Starting HugeGraphServer failed, and its cause was lost the same way.
Expected. After a Server container exits, its stdout (kubectl logs --previous) shows the error, and the JVM crash files sit in a documented directory an operator can mount.
Actual. Four things keep diagnostics inside the container filesystem.
-
The HStore image does not set
STDOUT_MODE.Dockerfile-hstoresets onlyJAVA_OPTSandHUGEGRAPH_HOME(:43-44), and the publishedhugegraph/server:latest(amd64 config, created 2026-10-01, read from the Docker Hub registry on 2026-10-02) has noSTDOUT_MODEin itsEnv. Without it,hugegraph-server.shsends the JVM's stdout and stderr,consoleappender included, tologs/hugegraph-server-stdout.log(:266-270), so nothing the JVM logs reacheskubectl logs. -
Even with
STDOUT_MODE=true, five loggers write only to the file.log4j2.xmlsetsLOG_PATHtologs(:21) and thefileappender writes${LOG_PATH}/hugegraph-server.log(:32). Since #2980 the root logger andorg.apache.hugegraphalso go toconsole(:106-109, :126-129).org.apache.hadoop,org.apache.zookeeper,com.alipay.sofa,io.nettyandorg.apache.commonsareadditivity="false"with onlyfile(:110-124), so their errors never reach stdout. Thefileappender also hasimmediateFlush="false"(:34), so a killed JVM can lose its last lines from the file as well. The audit loggers (:130-135) and the slow-query log (:136-138) are file-only too. They are separate streams and out of scope here. -
JVM crash files land inside the install directory.
hugegraph-server.shsetsLOGS="$TOP/logs"(:41), passes-XX:HeapDumpPath=${LOGS}(:124) and runscd "${TOP}"beforeexec java(:91). Nothing in the repository sets-XX:ErrorFile(git grep ErrorFileon176fb56ddreturns nothing), so HotSpot writeshs_err_pid<pid>.logto the working directory,/hugegraph-serverin the image. The image adds nothing here.JAVA_OPTS(Dockerfile-hstore:43) reaches the script through-j(docker-entrypoint.sh:243) and is appended on line 124. Line 124 sits inside theJAVA_OPTIONSdefault block (:118-129), so a user who setsJAVA_OPTIONSalso loses-XX:+HeapDumpOnOutOfMemoryError. -
The only persistence is an image
VOLUME.Dockerfile-hstorehasWORKDIR /hugegraph-server/(:46) andVOLUME /hugegraph-server(:78). Docker keeps that anonymous volume acrossdocker restart. Kubernetes does not turn an imageVOLUMEinto a pod volume. A restart starts a new container, andlogs/,hs_err_pid*.logand heap dumps go with the old one.
Fix direction.
- Set
STDOUT_MODE="true"inDockerfile-hstore, as #2980 did inDockerfile. - In
log4j2.xml, also send WARN and above from the five loggers on lines 110-124 toconsole(aconsoleref with a WARN threshold, or a second console appender). INFO from netty and hadoop stays in the file. Audit and slow-query stay file-only. - In
hugegraph-server.sh, add-XX:ErrorFile=${LOGS}/hs_err_pid%p.logand move-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOGS}out of the default block, so both apply whateverJAVA_OPTIONSholds. - Document
/hugegraph-server/logsas the directory to mount on Kubernetes. If #3253 (for #3236) lands, these flags should follow itsLOGS_OVERRIDEinstead of$TOP/logs.
Related: #2979 / #2980, #3203, #3236 / #3253, #3211 (non-root image, which would chown the same log directory).
Vertex/Edge example (问题点 / 边数据举例)
Not applicable.
Schema [VertexLabel, EdgeLabel, IndexLabel] (元数据结构)
Not applicable.
- 主要言語
- Java
- スター
- 3.2k
- フォーク
- 641
- 平均マージ
- 1日 9時間
- マージ済み PR(30日)
- 60
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/hugegraph のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
apache/hugegraph#3231 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
[Bug] Prometheus metrics format bug再び着手できるかも @cui2022 が 64 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
apache/hugegraph#3142 · コメント 7 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 3/5 1〜2日 初心者へのやさしさ 66/100
メンテナーはふだん 1 日以内に返信
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
メンテナーはふだん 1 日以内に返信
-
[Bug] CI accepts obsolete PR targets after retargeting or force-push再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 25/100
メンテナーはふだん 1 日以内に返信
apache/hugegraph の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
objectionary/lints#1556 ·
メンテナーはふだん 3 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
wildfly/wildfly-launcher#99 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
apache/rocketmq#11427 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
A failed JNA download is reported as a corrupt zip, because `curl` in `Makefile` lacks `--fail`オープン
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
objectionary/phino#1884 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信