From 9c0f77c11aad75f98aee3f94a8142a96ec34ae03 Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Sun, 17 Dec 2023 20:42:00 +0800 Subject: [PATCH 01/13] Switch jdk8 to jre11 --- docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index efe587a2fb..c291c6bf1a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,13 +16,13 @@ # specific language governing permissions and limitations # under the License. # -FROM openjdk:8-jdk as builder +FROM openjdk:11-jdk as builder WORKDIR /build COPY . . RUN ./gradlew clean build jar dist --parallel --daemon RUN ./gradlew installPlugin -FROM openjdk:8-jdk +FROM openjdk:11-jre RUN apt-get update && apt-get install -y locales RUN localedef -i en_US -f UTF-8 en_US.UTF-8 --quiet WORKDIR /data/app/eventmesh From b59088bc8f820cf6a990f58ecc4cd08abbed3973 Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Mon, 18 Dec 2023 17:04:43 +0800 Subject: [PATCH 02/13] Locate Java executable, check version and apply distinguished vm options https://docs.oracle.com/javase/9/tools/java.htm#GUID-BE93ABDC-999C-4CB5-A88B-1994AAAC74D5__CONVERTGCLOGGINGFLAGSTOXLOG-A5046BD1 --- eventmesh-runtime/bin/start.sh | 57 ++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/eventmesh-runtime/bin/start.sh b/eventmesh-runtime/bin/start.sh index 1e2099db96..dd475a0aea 100644 --- a/eventmesh-runtime/bin/start.sh +++ b/eventmesh-runtime/bin/start.sh @@ -21,24 +21,30 @@ # Java Environment Setting #=========================================================================================== set -e -#Server configuration may be inconsistent, add these configurations to avoid garbled code problems +# Server configuration may be inconsistent, add these configurations to avoid garbled code problems export LANG=en_US.UTF-8 export LC_CTYPE=en_US.UTF-8 export LC_ALL=en_US.UTF-8 TMP_JAVA_HOME="/nemo/jdk1.8.0_152" -#detect operating system. +# detect operating system. OS=$(uname) -function is_java8 { +function is_java8_or_11 { local _java="$1" [[ -x "$_java" ]] || return 1 - [[ "$("$_java" -version 2>&1)" =~ 'java version "1.8' || "$("$_java" -version 2>&1)" =~ 'openjdk version "1.8' ]] || return 2 + [[ "$("$_java" -version 2>&1)" =~ 'java version "1.8' || "$("$_java" -version 2>&1)" =~ 'openjdk version "1.8' || "$("$_java" -version 2>&1)" =~ 'java version "11' || "$("$_java" -version 2>&1)" =~ 'openjdk version "11' ]] || return 2 return 0 } -#0(not running), 1(is running) +function extract_java_version { + local _java="$1" + local version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{if ($1 == 1 && $2 == 8) print "8"; else if ($1 == 11) print "11"; else print "unknown"}') + echo "$version" +} + +# 0(not running), 1(is running) #function is_proxyRunning { # local _pid="$1" # local pid=`ps ax | grep -i 'org.apache.eventmesh.runtime.boot.EventMeshStartup' |grep java | grep -v grep | awk '{print $1}'|grep $_pid` @@ -75,25 +81,36 @@ function get_pid { echo "$ppid"; } +#=========================================================================================== +# Locate Java executable and check version +#=========================================================================================== -if [[ -d "$TMP_JAVA_HOME" ]] && is_java8 "$TMP_JAVA_HOME/bin/java"; then +JAVA_VERSION=8 +if [[ -d "$TMP_JAVA_HOME" ]] && is_java8_or_11 "$TMP_JAVA_HOME/bin/java"; then JAVA="$TMP_JAVA_HOME/bin/java" -elif [[ -d "$JAVA_HOME" ]] && is_java8 "$JAVA_HOME/bin/java"; then + JAVA_VERSION=$(extract_java_version "$TMP_JAVA_HOME/bin/java") +elif [[ -d "$JAVA_HOME" ]] && is_java8_or_11 "$JAVA_HOME/bin/java"; then JAVA="$JAVA_HOME/bin/java" -elif is_java8 "/nemo/jdk8/bin/java"; then + JAVA_VERSION=$(extract_java_version "$JAVA_HOME/bin/java") +elif is_java8_or_11 "/nemo/jdk8/bin/java"; then JAVA="/nemo/jdk8/bin/java"; -elif is_java8 "/nemo/jdk1.8/bin/java"; then +elif is_java8_or_11 "/nemo/jdk1.8/bin/java"; then JAVA="/nemo/jdk1.8/bin/java"; -elif is_java8 "/nemo/jdk/bin/java"; then +elif is_java8_or_11 "/nemo/jdk11/bin/java"; then + JAVA="/nemo/jdk11/bin/java"; + JAVA_VERSION=11 +elif is_java8_or_11 "/nemo/jdk/bin/java"; then JAVA="/nemo/jdk/bin/java"; -elif is_java8 "$(which java)"; then + JAVA_VERSION=$(extract_java_version "/nemo/jdk/bin/java") +elif is_java8_or_11 "$(which java)"; then JAVA="$(which java)" + JAVA_VERSION=$(extract_java_version "$(which java)") else - echo -e "ERROR\t Java 8 not found, operation abort." + echo -e "ERROR\t Java 8 or 11 not found, operation abort." exit 9; fi -echo "EventMesh use Java location: $JAVA" +echo "EventMesh using Java location: $JAVA" EVENTMESH_HOME=$(cd "$(dirname "$0")/.." && pwd) export EVENTMESH_HOME @@ -126,9 +143,16 @@ export JAVA_HOME #JAVA_OPT="${JAVA_OPT} -server -Xms2048M -Xmx4096M -Xmn2048m -XX:SurvivorRatio=4" JAVA_OPT=`cat ${EVENTMESH_HOME}/conf/server.env | grep APP_START_JVM_OPTION::: | awk -F ':::' {'print $2'}` JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8 -XX:MaxGCPauseMillis=50" -JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy" +JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log" +if [[ "$JAVA_VERSION" == "8" ]]; then + # Set JAVA_OPT for Java 8 + JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy" + JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" +elif [[ "$JAVA_VERSION" == "11" ]]; then + # Set JAVA_OPT for Java 11 + JAVA_OPT="${JAVA_OPT} -Xlog:gc* -Xlog:safepoint -Xlog:ergo*=debug -Xlog:age*=debug" +fi JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${EVENTMESH_HOME}/logs -XX:ErrorFile=${EVENTMESH_HOME}/logs/hs_err_%p.log" -JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch" JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=8G" @@ -166,8 +190,7 @@ fi make_logs_dir -echo "Using JDK[$JAVA]" >> ${EVENTMESH_LOG_HOME}/eventmesh.out - +echo "Using Java version: $JAVA_VERSION, path: $JAVA" >> ${EVENTMESH_LOG_HOME}/eventmesh.out EVENTMESH_MAIN=org.apache.eventmesh.runtime.boot.EventMeshStartup if [ $DOCKER ] From 74cd2121a5ca2d99dc2835cff843bba431e9e0bc Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Mon, 18 Dec 2023 18:05:57 +0800 Subject: [PATCH 03/13] Streamline further --- docker/Dockerfile | 3 +-- eventmesh-runtime/bin/start.sh | 16 ++++------------ 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index c291c6bf1a..c1f1d218c8 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -28,8 +28,7 @@ RUN localedef -i en_US -f UTF-8 en_US.UTF-8 --quiet WORKDIR /data/app/eventmesh COPY --from=builder /build/dist ./ -EXPOSE 10106 -EXPOSE 10205 10105 10000 +EXPOSE 10105 10000 10106 10205 ENV DOCKER true ENV EVENTMESH_HOME /data/app/eventmesh diff --git a/eventmesh-runtime/bin/start.sh b/eventmesh-runtime/bin/start.sh index dd475a0aea..516bb86955 100644 --- a/eventmesh-runtime/bin/start.sh +++ b/eventmesh-runtime/bin/start.sh @@ -26,7 +26,7 @@ export LANG=en_US.UTF-8 export LC_CTYPE=en_US.UTF-8 export LC_ALL=en_US.UTF-8 -TMP_JAVA_HOME="/nemo/jdk1.8.0_152" +TMP_JAVA_HOME="/customize/your/java/home/here" # detect operating system. OS=$(uname) @@ -92,16 +92,6 @@ if [[ -d "$TMP_JAVA_HOME" ]] && is_java8_or_11 "$TMP_JAVA_HOME/bin/java"; then elif [[ -d "$JAVA_HOME" ]] && is_java8_or_11 "$JAVA_HOME/bin/java"; then JAVA="$JAVA_HOME/bin/java" JAVA_VERSION=$(extract_java_version "$JAVA_HOME/bin/java") -elif is_java8_or_11 "/nemo/jdk8/bin/java"; then - JAVA="/nemo/jdk8/bin/java"; -elif is_java8_or_11 "/nemo/jdk1.8/bin/java"; then - JAVA="/nemo/jdk1.8/bin/java"; -elif is_java8_or_11 "/nemo/jdk11/bin/java"; then - JAVA="/nemo/jdk11/bin/java"; - JAVA_VERSION=11 -elif is_java8_or_11 "/nemo/jdk/bin/java"; then - JAVA="/nemo/jdk/bin/java"; - JAVA_VERSION=$(extract_java_version "/nemo/jdk/bin/java") elif is_java8_or_11 "$(which java)"; then JAVA="$(which java)" JAVA_VERSION=$(extract_java_version "$(which java)") @@ -143,13 +133,15 @@ export JAVA_HOME #JAVA_OPT="${JAVA_OPT} -server -Xms2048M -Xmx4096M -Xmn2048m -XX:SurvivorRatio=4" JAVA_OPT=`cat ${EVENTMESH_HOME}/conf/server.env | grep APP_START_JVM_OPTION::: | awk -F ':::' {'print $2'}` JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8 -XX:MaxGCPauseMillis=50" -JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log" +JAVA_OPT="${JAVA_OPT} -verbose:gc" if [[ "$JAVA_VERSION" == "8" ]]; then # Set JAVA_OPT for Java 8 + JAVA_OPT="${JAVA_OPT} -Xloggc:${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log" JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy" JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" elif [[ "$JAVA_VERSION" == "11" ]]; then # Set JAVA_OPT for Java 11 + JAVA_OPT="${JAVA_OPT} -Xlog:gc:${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log" JAVA_OPT="${JAVA_OPT} -Xlog:gc* -Xlog:safepoint -Xlog:ergo*=debug -Xlog:age*=debug" fi JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${EVENTMESH_HOME}/logs -XX:ErrorFile=${EVENTMESH_HOME}/logs/hs_err_%p.log" From 0f556cd6d646dd446d96049cf697b62dbc92b23b Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Mon, 18 Dec 2023 18:33:15 +0800 Subject: [PATCH 04/13] minor: Adjust port seq --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index c1f1d218c8..8d16e3f037 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -28,7 +28,7 @@ RUN localedef -i en_US -f UTF-8 en_US.UTF-8 --quiet WORKDIR /data/app/eventmesh COPY --from=builder /build/dist ./ -EXPOSE 10105 10000 10106 10205 +EXPOSE 10000 10105 10106 10205 ENV DOCKER true ENV EVENTMESH_HOME /data/app/eventmesh From 8af8fbd17c32bd3365664fb3826fc2a11f78ae66 Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Mon, 18 Dec 2023 19:57:50 +0800 Subject: [PATCH 05/13] minor: Streamline a little --- eventmesh-runtime/bin/start.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/eventmesh-runtime/bin/start.sh b/eventmesh-runtime/bin/start.sh index 516bb86955..e82a057b82 100644 --- a/eventmesh-runtime/bin/start.sh +++ b/eventmesh-runtime/bin/start.sh @@ -82,10 +82,9 @@ function get_pid { } #=========================================================================================== -# Locate Java executable and check version +# Locate Java Executable #=========================================================================================== -JAVA_VERSION=8 if [[ -d "$TMP_JAVA_HOME" ]] && is_java8_or_11 "$TMP_JAVA_HOME/bin/java"; then JAVA="$TMP_JAVA_HOME/bin/java" JAVA_VERSION=$(extract_java_version "$TMP_JAVA_HOME/bin/java") From 813c6ceea9146c6428041b35e9aa45ec7d197c92 Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Mon, 18 Dec 2023 23:42:10 +0800 Subject: [PATCH 06/13] Redirect GC logs to log file instead of stdout --- eventmesh-runtime/bin/start.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/eventmesh-runtime/bin/start.sh b/eventmesh-runtime/bin/start.sh index e82a057b82..5bbfc74ab5 100644 --- a/eventmesh-runtime/bin/start.sh +++ b/eventmesh-runtime/bin/start.sh @@ -129,19 +129,21 @@ export JAVA_HOME #elif [ $1 = "dev" ]; then JAVA_OPT="${JAVA_OPT} -server -Xms128M -Xmx256M -Xmn128m -XX:SurvivorRatio=4" #fi +GC_LOG="${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log" + #JAVA_OPT="${JAVA_OPT} -server -Xms2048M -Xmx4096M -Xmn2048m -XX:SurvivorRatio=4" JAVA_OPT=`cat ${EVENTMESH_HOME}/conf/server.env | grep APP_START_JVM_OPTION::: | awk -F ':::' {'print $2'}` JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8 -XX:MaxGCPauseMillis=50" JAVA_OPT="${JAVA_OPT} -verbose:gc" if [[ "$JAVA_VERSION" == "8" ]]; then # Set JAVA_OPT for Java 8 - JAVA_OPT="${JAVA_OPT} -Xloggc:${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log" + JAVA_OPT="${JAVA_OPT} -Xloggc:${GC_LOG}" JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy" JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" elif [[ "$JAVA_VERSION" == "11" ]]; then # Set JAVA_OPT for Java 11 - JAVA_OPT="${JAVA_OPT} -Xlog:gc:${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log" - JAVA_OPT="${JAVA_OPT} -Xlog:gc* -Xlog:safepoint -Xlog:ergo*=debug -Xlog:age*=debug" + JAVA_OPT="${JAVA_OPT} -Xlog:gc*:${GC_LOG}:time:filecount=5:filesize=30m" + JAVA_OPT="${JAVA_OPT} -Xlog:safepoint:${GC_LOG} -Xlog:ergo*=debug:${GC_LOG}" fi JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${EVENTMESH_HOME}/logs -XX:ErrorFile=${EVENTMESH_HOME}/logs/hs_err_%p.log" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" From 893e1aaaf90a6b946bad8cfaf1841c58bc67711e Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Mon, 18 Dec 2023 23:44:53 +0800 Subject: [PATCH 07/13] Streamline EVENTMESH_LOG_HOME & XLOG_PARAM --- eventmesh-runtime/bin/start.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eventmesh-runtime/bin/start.sh b/eventmesh-runtime/bin/start.sh index 5bbfc74ab5..e45b5c8789 100644 --- a/eventmesh-runtime/bin/start.sh +++ b/eventmesh-runtime/bin/start.sh @@ -129,7 +129,7 @@ export JAVA_HOME #elif [ $1 = "dev" ]; then JAVA_OPT="${JAVA_OPT} -server -Xms128M -Xmx256M -Xmn128m -XX:SurvivorRatio=4" #fi -GC_LOG="${EVENTMESH_HOME}/logs/eventmesh_gc_%p.log" +GC_LOG_FILE="${EVENTMESH_LOG_HOME}/eventmesh_gc_%p.log" #JAVA_OPT="${JAVA_OPT} -server -Xms2048M -Xmx4096M -Xmn2048m -XX:SurvivorRatio=4" JAVA_OPT=`cat ${EVENTMESH_HOME}/conf/server.env | grep APP_START_JVM_OPTION::: | awk -F ':::' {'print $2'}` @@ -137,15 +137,15 @@ JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent JAVA_OPT="${JAVA_OPT} -verbose:gc" if [[ "$JAVA_VERSION" == "8" ]]; then # Set JAVA_OPT for Java 8 - JAVA_OPT="${JAVA_OPT} -Xloggc:${GC_LOG}" + JAVA_OPT="${JAVA_OPT} -Xloggc:${GC_LOG_FILE} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy" - JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" elif [[ "$JAVA_VERSION" == "11" ]]; then # Set JAVA_OPT for Java 11 - JAVA_OPT="${JAVA_OPT} -Xlog:gc*:${GC_LOG}:time:filecount=5:filesize=30m" - JAVA_OPT="${JAVA_OPT} -Xlog:safepoint:${GC_LOG} -Xlog:ergo*=debug:${GC_LOG}" + XLOG_PARAM="time,level,tags:filecount=5,filesize=30m" + JAVA_OPT="${JAVA_OPT} -Xlog:gc*:${GC_LOG_FILE}:${XLOG_PARAM}" + JAVA_OPT="${JAVA_OPT} -Xlog:safepoint:${GC_LOG_FILE}:${XLOG_PARAM} -Xlog:ergo*=debug:${GC_LOG_FILE}:${XLOG_PARAM}" fi -JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${EVENTMESH_HOME}/logs -XX:ErrorFile=${EVENTMESH_HOME}/logs/hs_err_%p.log" +JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${EVENTMESH_LOG_HOME} -XX:ErrorFile=${EVENTMESH_LOG_HOME}/hs_err_%p.log" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch" JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=8G" From adbe17b69872839f17f018b3d04ff695d3ae042c Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Tue, 19 Dec 2023 02:48:13 +0800 Subject: [PATCH 08/13] Use multi-stage compiled JRE8 env by default --- docker/Dockerfile | 16 +++++++++++----- docker/Dockerfile_jre11 | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 docker/Dockerfile_jre11 diff --git a/docker/Dockerfile b/docker/Dockerfile index 8d16e3f037..ab9f37c558 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,17 +16,23 @@ # specific language governing permissions and limitations # under the License. # -FROM openjdk:11-jdk as builder +FROM openjdk:11-jdk as builder_11 WORKDIR /build COPY . . -RUN ./gradlew clean build jar dist --parallel --daemon +RUN ./gradlew clean generateGrammarSource --parallel --daemon + +FROM openjdk:8-jdk as builder_8 +WORKDIR /build +COPY . . +RUN ./gradlew clean build jar dist -x spotlessJava -x generateGrammarSource --parallel --daemon +COPY --from=builder_11 /build ./ RUN ./gradlew installPlugin -FROM openjdk:11-jre -RUN apt-get update && apt-get install -y locales +FROM openjdk:8-jre +RUN apt-get update && apt-get install -y locales procps RUN localedef -i en_US -f UTF-8 en_US.UTF-8 --quiet WORKDIR /data/app/eventmesh -COPY --from=builder /build/dist ./ +COPY --from=builder_8 /build/dist ./ EXPOSE 10000 10105 10106 10205 diff --git a/docker/Dockerfile_jre11 b/docker/Dockerfile_jre11 new file mode 100644 index 0000000000..1529363af1 --- /dev/null +++ b/docker/Dockerfile_jre11 @@ -0,0 +1,38 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +FROM openjdk:11-jdk as builder +WORKDIR /build +COPY . . +RUN ./gradlew clean build jar dist --parallel --daemon +RUN ./gradlew installPlugin + +FROM openjdk:11-jre +RUN apt-get update && apt-get install -y locales procps +RUN localedef -i en_US -f UTF-8 en_US.UTF-8 --quiet +WORKDIR /data/app/eventmesh +COPY --from=builder /build/dist ./ + +EXPOSE 10000 10105 10106 10205 + +ENV DOCKER true +ENV EVENTMESH_HOME /data/app/eventmesh +ENV EVENTMESH_LOG_HOME /data/app/eventmesh/logs +ENV CONFPATH /data/app/eventmesh/conf + +CMD ["bash", "bin/start.sh"] From 20eb9a9a66bb1fff8a00e8e07bae2004d593e36a Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Tue, 19 Dec 2023 03:07:23 +0800 Subject: [PATCH 09/13] fix: get pid correctly in docker --- eventmesh-runtime/bin/start.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/eventmesh-runtime/bin/start.sh b/eventmesh-runtime/bin/start.sh index e45b5c8789..0c7ce5c61c 100644 --- a/eventmesh-runtime/bin/start.sh +++ b/eventmesh-runtime/bin/start.sh @@ -28,7 +28,7 @@ export LC_ALL=en_US.UTF-8 TMP_JAVA_HOME="/customize/your/java/home/here" -# detect operating system. +# Detect operating system. OS=$(uname) function is_java8_or_11 { @@ -61,7 +61,7 @@ function get_pid { ppid=$(cat ${EVENTMESH_HOME}/bin/pid.file) # If the process does not exist, it indicates that the previous process terminated abnormally. if [ ! -d /proc/$ppid ]; then - # Remove the residual file + # Remove the residual file. rm ${EVENTMESH_HOME}/bin/pid.file echo -e "ERROR\t EventMesh process had already terminated unexpectedly before, please check log output." ppid="" @@ -74,8 +74,13 @@ function get_pid { # Known problem: grep Java may not be able to accurately identify Java processes ppid=$(/bin/ps -o user,pid,command | grep "java" | grep -i "org.apache.eventmesh.runtime.boot.EventMeshStartup" | grep -Ev "^root" |awk -F ' ' {'print $2'}) else - # It is required to identify the process as accurately as possible on Linux - ppid=$(ps -C java -o user,pid,command --cols 99999 | grep -w $EVENTMESH_HOME | grep -i "org.apache.eventmesh.runtime.boot.EventMeshStartup" | grep -Ev "^root" |awk -F ' ' {'print $2'}) + if [ $DOCKER ]; then + # No need to exclude root user in Docker containers. + ppid=$(ps -C java -o user,pid,command --cols 99999 | grep -w $EVENTMESH_HOME | grep -i "org.apache.eventmesh.runtime.boot.EventMeshStartup" | awk -F ' ' {'print $2'}) + else + # It is required to identify the process as accurately as possible on Linux. + ppid=$(ps -C java -o user,pid,command --cols 99999 | grep -w $EVENTMESH_HOME | grep -i "org.apache.eventmesh.runtime.boot.EventMeshStartup" | grep -Ev "^root" | awk -F ' ' {'print $2'}) + fi fi fi echo "$ppid"; @@ -176,7 +181,7 @@ if [[ $pid == "ERROR"* ]]; then echo -e "${pid}" exit 9 fi -if [ -n "$pid" ];then +if [ -n "$pid" ]; then echo -e "ERROR\t The server is already running (pid=$pid), there is no need to execute start.sh again." exit 9 fi @@ -186,8 +191,7 @@ make_logs_dir echo "Using Java version: $JAVA_VERSION, path: $JAVA" >> ${EVENTMESH_LOG_HOME}/eventmesh.out EVENTMESH_MAIN=org.apache.eventmesh.runtime.boot.EventMeshStartup -if [ $DOCKER ] -then +if [ $DOCKER ]; then $JAVA $JAVA_OPT -classpath ${EVENTMESH_HOME}/conf:${EVENTMESH_HOME}/apps/*:${EVENTMESH_HOME}/lib/* $EVENTMESH_MAIN >> ${EVENTMESH_LOG_HOME}/eventmesh.out else $JAVA $JAVA_OPT -classpath ${EVENTMESH_HOME}/conf:${EVENTMESH_HOME}/apps/*:${EVENTMESH_HOME}/lib/* $EVENTMESH_MAIN >> ${EVENTMESH_LOG_HOME}/eventmesh.out 2>&1 & From 5bd25b7c8f9a266bb04cd765340b193abf8b5dc8 Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Tue, 19 Dec 2023 03:43:44 +0800 Subject: [PATCH 10/13] Generate pid file exactly under /bin --- eventmesh-runtime/bin/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eventmesh-runtime/bin/start.sh b/eventmesh-runtime/bin/start.sh index 0c7ce5c61c..96fac20989 100644 --- a/eventmesh-runtime/bin/start.sh +++ b/eventmesh-runtime/bin/start.sh @@ -104,7 +104,7 @@ else exit 9; fi -echo "EventMesh using Java location: $JAVA" +echo "EventMesh using Java version: $JAVA_VERSION, path: $JAVA" EVENTMESH_HOME=$(cd "$(dirname "$0")/.." && pwd) export EVENTMESH_HOME @@ -195,6 +195,6 @@ if [ $DOCKER ]; then $JAVA $JAVA_OPT -classpath ${EVENTMESH_HOME}/conf:${EVENTMESH_HOME}/apps/*:${EVENTMESH_HOME}/lib/* $EVENTMESH_MAIN >> ${EVENTMESH_LOG_HOME}/eventmesh.out else $JAVA $JAVA_OPT -classpath ${EVENTMESH_HOME}/conf:${EVENTMESH_HOME}/apps/*:${EVENTMESH_HOME}/lib/* $EVENTMESH_MAIN >> ${EVENTMESH_LOG_HOME}/eventmesh.out 2>&1 & -echo $!>pid.file +echo $!>${EVENTMESH_HOME}/bin/pid.file fi exit 0 From 01261cb6d832184eb2b38e423612f3880187f577 Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Tue, 19 Dec 2023 05:24:06 +0800 Subject: [PATCH 11/13] exec builder_8 exactly after builder_11 --- docker/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ab9f37c558..ebd99f29d1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -23,9 +23,8 @@ RUN ./gradlew clean generateGrammarSource --parallel --daemon FROM openjdk:8-jdk as builder_8 WORKDIR /build -COPY . . -RUN ./gradlew clean build jar dist -x spotlessJava -x generateGrammarSource --parallel --daemon COPY --from=builder_11 /build ./ +RUN ./gradlew clean build jar dist -x spotlessJava -x generateGrammarSource --parallel --daemon RUN ./gradlew installPlugin FROM openjdk:8-jre From 0f46b6fd85e66a55d446332bd0fc1ca7edaa2d08 Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Tue, 19 Dec 2023 11:43:00 +0800 Subject: [PATCH 12/13] Use JDK instead of JRE --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ebd99f29d1..3e98459da7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -27,7 +27,7 @@ COPY --from=builder_11 /build ./ RUN ./gradlew clean build jar dist -x spotlessJava -x generateGrammarSource --parallel --daemon RUN ./gradlew installPlugin -FROM openjdk:8-jre +FROM openjdk:8-jdk RUN apt-get update && apt-get install -y locales procps RUN localedef -i en_US -f UTF-8 en_US.UTF-8 --quiet WORKDIR /data/app/eventmesh From e362affeb586b818c47eabec407cc24d45fe3529 Mon Sep 17 00:00:00 2001 From: Pil0tXia Date: Tue, 19 Dec 2023 15:13:44 +0800 Subject: [PATCH 13/13] Rename dockerfile --- .github/workflows/build.yaml | 2 +- docker/{Dockerfile_jre11 => Dockerfile_jdk11} | 2 +- docker/{Dockerfile => Dockerfile_jdk8} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename docker/{Dockerfile_jre11 => Dockerfile_jdk11} (98%) rename docker/{Dockerfile => Dockerfile_jdk8} (100%) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index a5a81f6dbb..68ca1799cc 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -45,5 +45,5 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - file: ./docker/Dockerfile + file: ./docker/Dockerfile_jdk8 context: ./ diff --git a/docker/Dockerfile_jre11 b/docker/Dockerfile_jdk11 similarity index 98% rename from docker/Dockerfile_jre11 rename to docker/Dockerfile_jdk11 index 1529363af1..7245e26046 100644 --- a/docker/Dockerfile_jre11 +++ b/docker/Dockerfile_jdk11 @@ -22,7 +22,7 @@ COPY . . RUN ./gradlew clean build jar dist --parallel --daemon RUN ./gradlew installPlugin -FROM openjdk:11-jre +FROM openjdk:11-jdk RUN apt-get update && apt-get install -y locales procps RUN localedef -i en_US -f UTF-8 en_US.UTF-8 --quiet WORKDIR /data/app/eventmesh diff --git a/docker/Dockerfile b/docker/Dockerfile_jdk8 similarity index 100% rename from docker/Dockerfile rename to docker/Dockerfile_jdk8