diff --git a/docker/Dockerfile b/docker/Dockerfile index 652fe64..88353cb 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -24,12 +24,15 @@ ARG HOME=/app ARG LOG=$HOME/logs ENV WORKDIR $HOME ENV START_DELAY_SECS 1 -ENV JVM_DEBUG "n" ENV JVM_XMS "1g" ENV JVM_XMX "1g" -ENV JVM_XMN "512m" +ENV JVM_XSS "256k" ENV JVM_MS "128m" ENV JVM_MMS "320m" +ENV USE_HEAP_DUMP "y" +ENV USE_GC_LOG "y" +ENV USE_LARGE_PAGES "n" +ENV DEBUG "n" ENV SPRING_PROFILES_ACTIVE "dev" ENV SERVER_PORT "8080" ENV MANAGEMENT_SERVER_PORT "9080" diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index f1cbfe0..29969f9 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,13 +1,41 @@ #!/bin/bash -JAVA_OPTS="${JAVA_OPTS} -XX:+UseG1GC" -JAVA_OPTS="${JAVA_OPTS} -server -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN} -XX:MetaspaceSize=${JVM_MS} -XX:MaxMetaspaceSize=${JVM_MMS}" -JAVA_OPTS="${JAVA_OPTS} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${WORKDIR}/logs/java_heapdump.hprof" -JAVA_OPTS="${JAVA_OPTS} -XX:-UseLargePages" -if [[ "${JVM_DEBUG}" == "y" ]]; then +JAVA_OPTS="${JAVA_OPTS} -server -XX:+AlwaysPreTouch -XX:-DisplayVMOutput -XX:+PrintFlagsFinal" +JAVA_OPTS="${JAVA_OPTS} -XX:-OmitStackTraceInFastThrow" +JAVA_OPTS="${JAVA_OPTS} -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UnlockCommercialFeatures" +JAVA_OPTS="${JAVA_OPTS} -XX:+FlightRecorder -XX:+DebugNonSafepoints -XX:+SafepointTimeout -XX:SafepointTimeoutDelay=500" +JAVA_OPTS="${JAVA_OPTS} -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1" +JAVA_OPTS="${JAVA_OPTS} -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xss${JVM_XSS} -XX:MetaspaceSize=${JVM_MS} -XX:MaxMetaspaceSize=${JVM_MMS}" +JAVA_OPTS="${JAVA_OPTS} -XX:ConcGCThreads=6 -XX:ParallelGCThreads=8" + +if [[ "${USE_G1_GC}" == "y" ]]; then + echo "G1 garbage collection is enabled." + JAVA_OPTS="${JAVA_OPTS} -XX:+UseG1GC -XX:G1LogLevel=finest -XX:G1NewSizePercent=50 -XX:MaxGCPauseMillis=200" + JAVA_OPTS="${JAVA_OPTS} -XX:InitiatingHeapOccupancyPercent=45 -XX:G1MixedGCLiveThresholdPercent=65" +fi + +if [[ "${USE_HEAP_DUMP}" == "y" ]]; then + echo "Heap dump path is '${WORKDIR}/logs/jvm_heap_dump.hprof'." + JAVA_OPTS="${JAVA_OPTS} -XX:HeapDumpPath=${WORKDIR}/logs/jvm_heap_dump.hprof -XX:+HeapDumpOnOutOfMemoryError" +fi + +if [[ "${USE_GC_LOG}" == "y" ]]; then + echo "GC log path is '/dev/shm/logs/jvm_gc.log'." + JAVA_OPTS="${JAVA_OPTS} -XX:LogFile=/dev/shm/logs/jvm_gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10m" + JAVA_OPTS="${JAVA_OPTS} -XX:+PrintReferenceGC -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime" +fi + +if [[ "${USE_LARGE_PAGES}" == "y" ]]; then + echo "Use large pages." + JAVA_OPTS="${JAVA_OPTS} -XX:+UseLargePages" +fi + +if [[ "${DEBUG}" == "y" ]]; then + echo "Attach to remote JVM using port 5005." JAVA_OPTS="${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n" fi -echo "The application will start in ${START_DELAY_SECS}s..." +echo "The application will start in ${START_DELAY_SECS}s." sleep ${START_DELAY_SECS} -exec java $JAVA_OPTS -noverify -XX:+AlwaysPreTouch -Djava.security.egd=file:/dev/./urandom "org.springframework.boot.loader.JarLauncher" "$@" +exec java $JAVA_OPTS -noverify -Djava.security.egd=file:/dev/./urandom "org.springframework.boot.loader.JarLauncher" "$@" diff --git a/eden-demo-cola-adapter/src/main/java/org/ylzl/eden/demo/adapter/user/job/UserJobHandler.java b/eden-demo-cola-adapter/src/main/java/org/ylzl/eden/demo/adapter/user/job/UserJobHandler.java index b87d57b..63fe216 100644 --- a/eden-demo-cola-adapter/src/main/java/org/ylzl/eden/demo/adapter/user/job/UserJobHandler.java +++ b/eden-demo-cola-adapter/src/main/java/org/ylzl/eden/demo/adapter/user/job/UserJobHandler.java @@ -20,7 +20,6 @@ import com.xxl.job.core.handler.annotation.XxlJob; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.ylzl.eden.spring.integration.xxljob.XxlJobRegister; /** * 用户信息离线处理 @@ -32,7 +31,8 @@ @Component public class UserJobHandler { - @XxlJobRegister(desc = "用户信息离线处理", author = "梦想歌", cron = "30 * * * * ?") // 自动注册到XxlJob + // 目前 XxlJob2.x 开源版本扩展性特别差,暂时不支持 自动注册到 XxlJob + // @XxlJobRegister(desc = "用户信息离线处理", author = "梦想歌", cron = "30 * * * * ?") @XxlJob(value = "userJobHandler", init = "init", destroy = "destroy") public void jobHandler() throws Exception { XxlJobHelper.log("XXL-JOB, Hello World."); diff --git a/eden-demo-cola-start/src/main/docker/jib/entrypoint.sh b/eden-demo-cola-start/src/main/docker/jib/entrypoint.sh index 05dfdb7..75a239e 100644 --- a/eden-demo-cola-start/src/main/docker/jib/entrypoint.sh +++ b/eden-demo-cola-start/src/main/docker/jib/entrypoint.sh @@ -1,13 +1,41 @@ #!/bin/bash -JAVA_OPTS="${JAVA_OPTS} -XX:+UseG1GC" -JAVA_OPTS="${JAVA_OPTS} -server -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN} -XX:MetaspaceSize=${JVM_MS} -XX:MaxMetaspaceSize=${JVM_MMS}" -JAVA_OPTS="${JAVA_OPTS} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${WORKDIR}/logs/java_heapdump.hprof" -JAVA_OPTS="${JAVA_OPTS} -XX:-UseLargePages" -if [[ "${JVM_DEBUG}" == "y" ]]; then +JAVA_OPTS="${JAVA_OPTS} -server -XX:+AlwaysPreTouch -XX:-DisplayVMOutput -XX:+PrintFlagsFinal" +JAVA_OPTS="${JAVA_OPTS} -XX:-OmitStackTraceInFastThrow" +JAVA_OPTS="${JAVA_OPTS} -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UnlockCommercialFeatures" +JAVA_OPTS="${JAVA_OPTS} -XX:+FlightRecorder -XX:+DebugNonSafepoints -XX:+SafepointTimeout -XX:SafepointTimeoutDelay=500" +JAVA_OPTS="${JAVA_OPTS} -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1" +JAVA_OPTS="${JAVA_OPTS} -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xss${JVM_XSS} -XX:MetaspaceSize=${JVM_MS} -XX:MaxMetaspaceSize=${JVM_MMS}" +JAVA_OPTS="${JAVA_OPTS} -XX:ConcGCThreads=6 -XX:ParallelGCThreads=8" + +if [[ "${USE_G1_GC}" == "y" ]]; then + echo "G1 garbage collection is enabled." + JAVA_OPTS="${JAVA_OPTS} -XX:+UseG1GC -XX:G1LogLevel=finest -XX:G1NewSizePercent=50 -XX:MaxGCPauseMillis=200" + JAVA_OPTS="${JAVA_OPTS} -XX:InitiatingHeapOccupancyPercent=45 -XX:G1MixedGCLiveThresholdPercent=65" +fi + +if [[ "${USE_HEAP_DUMP}" == "y" ]]; then + echo "Heap dump path is '${WORKDIR}/logs/jvm_heap_dump.hprof'." + JAVA_OPTS="${JAVA_OPTS} -XX:HeapDumpPath=${WORKDIR}/logs/jvm_heap_dump.hprof -XX:+HeapDumpOnOutOfMemoryError" +fi + +if [[ "${USE_GC_LOG}" == "y" ]]; then + echo "GC log path is '/dev/shm/logs/jvm_gc.log'." + JAVA_OPTS="${JAVA_OPTS} -XX:LogFile=/dev/shm/logs/jvm_gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10m" + JAVA_OPTS="${JAVA_OPTS} -XX:+PrintReferenceGC -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime" +fi + +if [[ "${USE_LARGE_PAGES}" == "y" ]]; then + echo "Use large pages." + JAVA_OPTS="${JAVA_OPTS} -XX:+UseLargePages" +fi + +if [[ "${DEBUG}" == "y" ]]; then + echo "Attach to remote JVM using port 5005." JAVA_OPTS="${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n" fi -echo "The application will start in ${START_DELAY_SECS}s..." +echo "The application will start in ${START_DELAY_SECS}s." sleep ${START_DELAY_SECS} -exec java ${JAVA_OPTS} -noverify -XX:+AlwaysPreTouch -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "org.ylzl.eden.demo.ColaApplication" "$@" +exec java ${JAVA_OPTS} -noverify -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "org.ylzl.eden.demo.ColaApplication" "$@"