#!/bin/sh #cp /etc/hosts /etc/hosts.temp # 初始化环境变量(设置默认值,避免空变量) APP_NAME=${APP_NAME:-"default-springboot-app"} # 默认服务名 SKYWALKING_SERVER=${SKYWALKING_SERVER:-"localhost:11800"} # 默认SkyWalking服务地址 ENV_APP_PRO_FILE=${ENV_APP_PRO_FILE:-"test"} # 默认环境为test # 初始化Java启动参数(包含是否使用-server模式) java_base="java -javaagent:/opt/agent/skywalking-agent.jar -Dskywalking.agent.service_name=$APP_NAME" export java_base="$java_base -Dskywalking.collector.backend_service=$SKYWALKING_SERVER" java_start="$java_base -jar" # 根据环境变量区分开发/生产环境配置 if [ "$ENV_APP_PRO_FILE" = "prod" ]; then # 生产环境JVM参数 export JAVA_OPTS="-Xms1024m -Xmx4096m -Xmn512m -Xss512k -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m" export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:G1HeapRegionSize=32m -XX:G1ReservePercent=20" export JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=500 -XX:G1MixedGCCountTarget=10" export JAVA_OPTS="$JAVA_OPTS -verbose:gc -Xloggc:/var/log/app/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps" export JAVA_OPTS="$JAVA_OPTS -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M" # 生产环境使用-server模式 java_start="$java_base -jar -server" else # 开发环境JVM参数 export JAVA_OPTS="-Xms512m -Xmx1024m -Xmn256m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m" export JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+UseParNewGC" export JAVA_OPTS="$JAVA_OPTS -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:CMSMaxAbortablePrecleanTime=5000" export JAVA_OPTS="$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly" export JAVA_OPTS="$JAVA_OPTS -verbose:gc -Xloggc:./logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps" # 开发环境开启远程调试 export JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" fi # 公共配置(编码、时区等) export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8" export JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true" export JAVA_OPTS="$JAVA_OPTS -Duser.language=zh -Duser.country=CN -Duser.timezone=Asia/Shanghai" # SpringBoot 环境配置 export JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=$ENV_APP_PRO_FILE" # 输出启动参数 echo "启动参数:$java_start $JAVA_OPTS $ENV_APP_FILE_PATH" # 执行启动命令(用双引号包裹每个变量) exec $java_start $JAVA_OPTS $ENV_APP_FILE_PATH