@echo off SETLOCAL :: 设置命令行字符集为 UTF-8 chcp 65001 :: ======================================== REM 配置项 REM ======================================== :: Java 路径 set "JAVA_PATH=D:\sy_software\jdk-20\bin\java.exe" :: JAR 包路径 set "JAR_PATH=D:\sy_software\application-app\yudao-server.jar" :: 服务名 set "SERVICE_NAME=yudao-server" :: 日志路径 set "LOG_PATH=D:\sy_software\application-app\logs" :: NSSM 安装路径 set "NSSM_PATH=D:\sy_software\nssm\win64\nssm.exe" :: ======================================== REM 优化的 JVM 参数 REM ======================================== set "JVM_OPTS=-server -Xms1g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=512m -XX:MaxDirectMemorySize=1g -XX:HeapBaseMinAddress=0x100000000 -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%LOG_PATH%/heap_dump.hprof -XX:ErrorFile=%LOG_PATH%/hs_err_pid%%p.log -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai" :: ======================================== REM 创建日志目录 REM ======================================== if not exist "%LOG_PATH%" ( echo 创建日志目录: %LOG_PATH% mkdir "%LOG_PATH%" ) :: ======================================== REM 使用 NSSM 安装/更新服务 REM ======================================== echo ======================================== echo 正在使用 NSSM 创建/更新 Spring Boot 服务... echo ======================================== :: 停止旧服务 echo 停止旧服务... %NSSM_PATH% stop %SERVICE_NAME% :: 删除旧服务 echo 删除旧服务... %NSSM_PATH% remove %SERVICE_NAME% confirm :: 创建新服务 echo 创建新服务... %NSSM_PATH% install %SERVICE_NAME% "%JAVA_PATH%" :: 配置服务应用目录 echo 配置服务应用目录... %NSSM_PATH% set %SERVICE_NAME% AppDirectory "%~dp0" :: 配置 JVM 参数和 JAR 路径 echo 配置 JVM 参数(关键:HeapBaseMinAddress=0x100000000)... %NSSM_PATH% set %SERVICE_NAME% AppParameters %JVM_OPTS% -jar "%JAR_PATH%" :: 配置服务启动类型(延迟自动启动) echo 设置服务为开机延迟自启动... %NSSM_PATH% set %SERVICE_NAME% Start SERVICE_DELAYED_AUTO_START :: 配置服务重启策略(崩溃后自动重启) echo 配置服务崩溃后自动重启... %NSSM_PATH% set %SERVICE_NAME% AppExit Default Restart %NSSM_PATH% set %SERVICE_NAME% AppRestartDelay 5000 :: 配置服务日志输出 echo 配置服务日志... %NSSM_PATH% set %SERVICE_NAME% stdout "%LOG_PATH%\service-stdout.log" %NSSM_PATH% set %SERVICE_NAME% stderr "%LOG_PATH%\service-stderr.log" :: 启动服务 echo 启动服务... %NSSM_PATH% start %SERVICE_NAME% echo. echo ======================================== echo 完成:服务已注册并启动 echo ======================================== echo 服务名称: %SERVICE_NAME% echo JVM 参数已优化以解决本地内存不足问题 echo -Xms1g -Xmx2g echo -XX:HeapBaseMinAddress=0x100000000 (关键修复) echo -XX:ReservedCodeCacheSize=512m echo -XX:+UseG1GC echo. echo 日志路径: echo 服务日志: %LOG_PATH%\service-stdout.log echo 错误日志: %LOG_PATH%\service-stderr.log echo JVM 崩溃日志: %LOG_PATH%\hs_err_pid*.log echo ======================================== ENDLOCAL pause