This is an automated email from the ASF dual-hosted git repository.
pandaapo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/eventmesh.git
The following commit(s) were added to refs/heads/master by this push:
new 2b2bf71ef [ISSUE #4670] Support Java 11 StartUp and Docker deployment
(#4675)
2b2bf71ef is described below
commit 2b2bf71efcbcac3d0166ee1cd7f96b55e4818be3
Author: Pil0tXia <[email protected]>
AuthorDate: Tue Dec 19 15:26:29 2023 +0800
[ISSUE #4670] Support Java 11 StartUp and Docker deployment (#4675)
* Switch jdk8 to jre11
* 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
* Streamline further
* minor: Adjust port seq
* minor: Streamline a little
* Redirect GC logs to log file instead of stdout
* Streamline EVENTMESH_LOG_HOME & XLOG_PARAM
* Use multi-stage compiled JRE8 env by default
* fix: get pid correctly in docker
* Generate pid file exactly under /bin
* exec builder_8 exactly after builder_11
* Use JDK instead of JRE
* Rename dockerfile
---
.github/workflows/build.yaml | 2 +-
docker/{Dockerfile => Dockerfile_jdk11} | 9 ++--
docker/{Dockerfile => Dockerfile_jdk8} | 16 ++++---
eventmesh-runtime/bin/start.sh | 78 +++++++++++++++++++++------------
4 files changed, 64 insertions(+), 41 deletions(-)
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index a5a81f6db..68ca1799c 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 b/docker/Dockerfile_jdk11
similarity index 89%
copy from docker/Dockerfile
copy to docker/Dockerfile_jdk11
index efe587a2f..7245e2604 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile_jdk11
@@ -16,20 +16,19 @@
# 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
-RUN apt-get update && apt-get install -y locales
+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
COPY --from=builder /build/dist ./
-EXPOSE 10106
-EXPOSE 10205 10105 10000
+EXPOSE 10000 10105 10106 10205
ENV DOCKER true
ENV EVENTMESH_HOME /data/app/eventmesh
diff --git a/docker/Dockerfile b/docker/Dockerfile_jdk8
similarity index 73%
rename from docker/Dockerfile
rename to docker/Dockerfile_jdk8
index efe587a2f..3e98459da 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile_jdk8
@@ -16,20 +16,24 @@
# specific language governing permissions and limitations
# under the License.
#
-FROM openjdk:8-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 --from=builder_11 /build ./
+RUN ./gradlew clean build jar dist -x spotlessJava -x generateGrammarSource
--parallel --daemon
RUN ./gradlew installPlugin
FROM openjdk:8-jdk
-RUN apt-get update && apt-get install -y locales
+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 10106
-EXPOSE 10205 10105 10000
+EXPOSE 10000 10105 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 1e2099db9..96fac2098 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"
+TMP_JAVA_HOME="/customize/your/java/home/here"
-#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`
@@ -55,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=""
@@ -68,32 +74,37 @@ 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";
}
+#===========================================================================================
+# Locate Java Executable
+#===========================================================================================
-if [[ -d "$TMP_JAVA_HOME" ]] && is_java8 "$TMP_JAVA_HOME/bin/java"; then
+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="/nemo/jdk8/bin/java";
-elif is_java8 "/nemo/jdk1.8/bin/java"; then
- JAVA="/nemo/jdk1.8/bin/java";
-elif is_java8 "/nemo/jdk/bin/java"; then
- JAVA="/nemo/jdk/bin/java";
-elif is_java8 "$(which java)"; then
+ JAVA_VERSION=$(extract_java_version "$JAVA_HOME/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 version: $JAVA_VERSION, path: $JAVA"
EVENTMESH_HOME=$(cd "$(dirname "$0")/.." && pwd)
export EVENTMESH_HOME
@@ -123,12 +134,23 @@ export JAVA_HOME
#elif [ $1 = "dev" ]; then JAVA_OPT="${JAVA_OPT} -server -Xms128M -Xmx256M
-Xmn128m -XX:SurvivorRatio=4"
#fi
+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'}`
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} -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} -verbose:gc"
+if [[ "$JAVA_VERSION" == "8" ]]; then
+ # Set JAVA_OPT for Java 8
+ 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"
+elif [[ "$JAVA_VERSION" == "11" ]]; then
+ # Set JAVA_OPT for Java 11
+ 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_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"
@@ -159,22 +181,20 @@ 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
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 ]
-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 &
-echo $!>pid.file
+echo $!>${EVENTMESH_HOME}/bin/pid.file
fi
exit 0
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]