byteayan commented on code in PR #3258:
URL: https://github.com/apache/hugegraph/pull/3258#discussion_r4185419010
##########
hugegraph-server/hugegraph-dist/src/assembly/static/bin/hugegraph-server.sh:
##########
@@ -121,13 +121,41 @@ if [ "$JAVA_OPTIONS" = "" ]; then
echo "Failed to start HugeGraphServer, requires at least ${MIN_MEM}MB
free memory" >> "${OUTPUT}"
exit 1
fi
- JAVA_OPTIONS="-Xms${MIN_MEM}m -Xmx${XMX}m -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=${LOGS} ${USER_OPTION}"
+ JAVA_OPTIONS="-Xms${MIN_MEM}m -Xmx${XMX}m ${USER_OPTION}"
# Rolling out detailed GC logs
#JAVA_OPTIONS="${JAVA_OPTIONS} -XX:+UseGCLogFileRotation
-XX:GCLogFileSize=10M -XX:NumberOfGCLogFiles=3 \
# -Xloggc:./logs/gc.log -XX:+PrintHeapAtGC
-XX:+PrintGCDetails -XX:+PrintGCDateStamps"
fi
+# Keep heap dumps and JVM crash logs in $LOGS whatever JAVA_OPTIONS holds. The
+# defaults go first in JAVA_TOOL_OPTIONS, which the JVM reads before the
operator's
+# own JAVA_TOOL_OPTIONS, JDK_JAVA_OPTIONS, the command line (JAVA_OPTIONS and
-j)
+# and _JAVA_OPTIONS, so any of those overrides them. The JVM does that parsing
+# itself, including quoted options and @argfiles.
+# A restarted container often reuses the JVM's PID, and HotSpot will not
overwrite
+# an existing crash log or heap dump, so the file names carry the launch time
plus
+# a counter that skips names already used in $LOGS. The script execs java
below,
+# so $$ is the JVM's PID.
+crash_files_exist() {
+ local file
+ for file in "${LOGS}"/java_pid*_"$1".hprof "${LOGS}"/hs_err_pid*_"$1".log;
do
+ [[ -e ${file} ]] && return 0
+ done
+ return 1
+}
+LAUNCH_STAMP=$(date +%Y%m%d-%H%M%S)
+LAUNCH_ID="${LAUNCH_STAMP}"
+LAUNCH_SUFFIX=0
+while crash_files_exist "${LAUNCH_ID}"; do
Review Comment:
Fixed in 7e077257: crash-file names now include the host name (the pod name
on Kubernetes) before the launch time, e.g. `java_pid1_<pod>_<stamp>.hprof`,
with characters unsafe in a file name replaced by `_`. Pods sharing a log PVC
no longer pick the same name even as PID 1 in the same second, and the counter
still covers restarts of one pod. The test covers a second host in the same
second and an unsafe host name.
##########
docker/README.md:
##########
@@ -230,6 +230,12 @@ Standalone stores RocksDB data at
`/hugegraph-server/rocksdb-data`. The HStore t
`docker compose down` keeps named-volume data. `docker compose down -v`
intentionally deletes it.
+### Server logs and crash files
+
+Both Server images (`hugegraph/hugegraph` and `hugegraph/server`) write the
HugeGraph log to container stdout. WARN and above from Hadoop, ZooKeeper, SOFA,
Netty and Commons also reaches stdout; their INFO output, the audit log and the
slow-query log stay in files only. When a Server exits during startup, `docker
logs` or `kubectl logs --previous` shows why.
Review Comment:
Fixed in 7e077257 by making the claim true rather than narrowing it. A
`report_error` helper now writes every launcher error before Java starts to
stderr as well as `hugegraph-server.log`: unsupported JDK, too little free
memory, unknown GC option, missing security properties, and telemetry agent
download/checksum failures. `start-hugegraph.sh` passes that stderr to the
terminal or container log. The README sentence now names these errors, and a
test checks a preflight error on both stderr and the log.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]