#!/bin/bash

# Windows 环境下使用 WMIC 命令
#if [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then
    # Windows 系统
#    TOTAL_MEM_KB=$(wmic OS get FreePhysicalMemory | tail -1)
    # 或其他 Windows 特定命令
#else
    # Linux 系统
#    TOTAL_MEM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
#fi

# 获取服务器总内存大小 (单位：KB)
TOTAL_MEM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
TOTAL_MEM_GB=$((TOTAL_MEM_KB / 1024 / 1024))

# 根据内存大小动态设置 JVM 参数
if [ $TOTAL_MEM_GB -le 8 ]; then
    # 内存 <= 8GB
    JVM_XMS="4G"
    JVM_XMX="4G"
    JVM_XMN="1G"
elif [ $TOTAL_MEM_GB -le 16 ]; then
    # 内存 8-16GB
    JVM_XMS="8G"
    JVM_XMX="8G"
    JVM_XMN="2G"
elif [ $TOTAL_MEM_GB -le 32 ]; then
    # 内存 16-32GB
    JVM_XMS="16G"
    JVM_XMX="16G"
    JVM_XMN="4G"
else
    # 内存 > 32GB
    JVM_XMS="20G"
    JVM_XMX="20G"
    JVM_XMN="6G"
fi

echo "服务器总内存: ${TOTAL_MEM_GB}GB, JVM参数: -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN}"

if pgrep -f "dhr.war" > /dev/null
then
       	echo "dhr.war process is running."
else	
	nohup jdk/bin/java -server -Xms${JVM_XMS} -Xmx${JVM_XMX} -Xmn${JVM_XMN} -XX:MetaspaceSize=512M -XX:SurvivorRatio=8 -XX:MaxMetaspaceSize=512M -Djava.awt.headless=true -XX:-OmitStackTraceInFastThrow -jar dhr.war >/dev/null 2>&1 &
	#nohup jdk/bin/java  -server -Xms2G -Xmx2G -Xmn1024m -XX:MetaspaceSize=512M -XX:SurvivorRatio=8 -XX:MaxMetaspaceSize=512M -Djava.awt.headless=true -jar dhr.war >/dev/null 2>&1 &
	#nohup jdk/bin/java  -server -Xms4G -Xmx4G -Xmn2048m -Xss4m -XX:MetaspaceSize=512M -XX:SurvivorRatio=8 -XX:MaxMetaspaceSize=512M -Djava.awt.headless=true -jar dhr.war >/dev/null 2>&1 &
	#nohup jdk/bin/java -server -Xmx16g -Xms16g -Xmn4g -Xss128m -XX:MetaspaceSize=1G -XX:SurvivorRatio=10 -XX:MaxMetaspaceSize=1G -Djava.awt.headless=true -jar dhr.war >/dev/null 2>&1 &
	#nohup jdk/bin/java -server -Xmx32g -Xms32g -Xmn8g -Xss128m -XX:MetaspaceSize=2G -XX:SurvivorRatio=10 -XX:MaxMetaspaceSize=2G -Djava.awt.headless=true -jar dhr.war >/dev/null 2>&1 &
fi
