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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

@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