|
|
|
|
|
@echo off
|
|
|
|
|
|
REM ========================================
|
|
|
|
|
|
REM 优化的 JVM 启动参数模板
|
|
|
|
|
|
REM 用于解决 Windows 7GB 内存系统上的本地内存不足问题
|
|
|
|
|
|
REM ========================================
|
|
|
|
|
|
|
|
|
|
|
|
:: 设置命令行字符集为 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 "LOG_PATH=D:\sy_software\application-app\logs"
|
|
|
|
|
|
|
|
|
|
|
|
:: 应用名称(用于日志文件名)
|
|
|
|
|
|
set "APP_NAME=yudao-server"
|
|
|
|
|
|
|
|
|
|
|
|
:: ========================================
|
|
|
|
|
|
REM 优化的 JVM 参数
|
|
|
|
|
|
REM ========================================
|
|
|
|
|
|
|
|
|
|
|
|
:: 内存配置
|
|
|
|
|
|
:: -Xms: 初始堆大小(1GB)
|
|
|
|
|
|
:: -Xmx: 最大堆大小(2GB,为其他进程和本地内存保留 5GB)
|
|
|
|
|
|
:: -XX:MetaspaceSize: 初始元空间大小
|
|
|
|
|
|
:: -XX:MaxMetaspaceSize: 最大元空间大小
|
|
|
|
|
|
:: -XX:ReservedCodeCacheSize: JIT 编译代码缓存(增加到 512MB)
|
|
|
|
|
|
|
|
|
|
|
|
:: 关键修复参数
|
|
|
|
|
|
:: -XX:HeapBaseMinAddress=0x100000000
|
|
|
|
|
|
:: 将 Java Heap 放在 4GB 地址空间以上
|
|
|
|
|
|
:: 避免与本地内存(OpenCV、ONNX、相机库等)地址冲突
|
|
|
|
|
|
:: -XX:MaxDirectMemorySize=1g
|
|
|
|
|
|
:: 设置直接内存最大限制为 1GB
|
|
|
|
|
|
:: 解决 ONNX、OpenCV 等需要分配大量直接内存的问题
|
|
|
|
|
|
|
|
|
|
|
|
set "JVM_OPTS=-server ^
|
|
|
|
|
|
-Xms1g ^
|
|
|
|
|
|
-Xmx2g ^
|
|
|
|
|
|
-XX:MetaspaceSize=256m ^
|
|
|
|
|
|
-XX:MaxMetaspaceSize=512m ^
|
|
|
|
|
|
-XX:ReservedCodeCacheSize=512m ^
|
|
|
|
|
|
-XX:MaxDirectMemorySize=1g ^
|
|
|
|
|
|
-XX:HeapBaseMinAddress=0x100000000"
|
|
|
|
|
|
|
|
|
|
|
|
:: 垃圾回收器配置
|
|
|
|
|
|
:: -XX:+UseG1GC: 使用 G1 垃圾回收器
|
|
|
|
|
|
:: -XX:MaxGCPauseMillis=200: 目标 GC 暂停时间 200ms
|
|
|
|
|
|
set "JVM_OPTS=%JVM_OPTS% ^
|
|
|
|
|
|
-XX:+UseG1GC ^
|
|
|
|
|
|
-XX:MaxGCPauseMillis=200"
|
|
|
|
|
|
|
|
|
|
|
|
:: 错误处理和日志
|
|
|
|
|
|
:: -XX:+HeapDumpOnOutOfMemoryError: OOM 时生成堆转储
|
|
|
|
|
|
:: -XX:HeapDumpPath: 堆转储文件路径
|
|
|
|
|
|
:: -XX:ErrorFile: JVM 崩溃日志路径
|
|
|
|
|
|
set "JVM_OPTS=%JVM_OPTS% ^
|
|
|
|
|
|
-XX:+HeapDumpOnOutOfMemoryError ^
|
|
|
|
|
|
-XX:HeapDumpPath=%LOG_PATH%/%APP_NAME%_heap_dump.hprof ^
|
|
|
|
|
|
-XX:ErrorFile=%LOG_PATH%/hs_err_pid%%p.log"
|
|
|
|
|
|
|
|
|
|
|
|
:: 系统属性
|
|
|
|
|
|
:: -Dfile.encoding: 文件编码
|
|
|
|
|
|
:: -Duser.timezone: 时区
|
|
|
|
|
|
set "JVM_OPTS=%JVM_OPTS% ^
|
|
|
|
|
|
-Dfile.encoding=UTF-8 ^
|
|
|
|
|
|
-Duser.timezone=Asia/Shanghai"
|
|
|
|
|
|
|
|
|
|
|
|
:: ========================================
|
|
|
|
|
|
REM 启动应用
|
|
|
|
|
|
REM ========================================
|
|
|
|
|
|
|
|
|
|
|
|
echo ========================================
|
|
|
|
|
|
echo 正在启动: %APP_NAME%
|
|
|
|
|
|
echo ========================================
|
|
|
|
|
|
echo Java 路径: %JAVA_PATH%
|
|
|
|
|
|
echo JAR 路径: %JAR_PATH%
|
|
|
|
|
|
echo 日志路径: %LOG_PATH%
|
|
|
|
|
|
echo.
|
|
|
|
|
|
echo JVM 参数:
|
|
|
|
|
|
echo -Xms1g -Xmx2g
|
|
|
|
|
|
echo -XX:HeapBaseMinAddress=0x100000000 (关键修复)
|
|
|
|
|
|
echo -XX:ReservedCodeCacheSize=512m
|
|
|
|
|
|
echo -XX:+UseG1GC
|
|
|
|
|
|
echo.
|
|
|
|
|
|
echo ========================================
|
|
|
|
|
|
|
|
|
|
|
|
:: 检查日志目录是否存在
|
|
|
|
|
|
if not exist "%LOG_PATH%" (
|
|
|
|
|
|
echo 创建日志目录: %LOG_PATH%
|
|
|
|
|
|
mkdir "%LOG_PATH%"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
:: 启动应用
|
|
|
|
|
|
echo 启动中...
|
|
|
|
|
|
"%JAVA_PATH%" %JVM_OPTS% -jar "%JAR_PATH%"
|
|
|
|
|
|
|
|
|
|
|
|
echo.
|
|
|
|
|
|
echo ========================================
|
|
|
|
|
|
echo 应用已退出
|
|
|
|
|
|
echo ========================================
|
|
|
|
|
|
pause
|