You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yudao/optimized-jvm-start-templat...

111 lines
3.1 KiB
Batchfile

@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