原理很简单,tomcat启动前会先执行bin目录下的setenv.sh脚本(默认不存在,需手动创建),在脚本中获取服务器内存进行动态分配即可
#!/usr/bin/env bash
MEM_SIZE="1" #默认1G
function get_mem_k_size_func(){
local _memSize="$(vmstat -s -S K | awk 'NR==1{print $1}')"
echo "${_memSize}"
}
function get_mem_m_size_func(){
local _memSize="$(vmstat -s -S M | awk 'NR==1{print $1}')"
echo "${_memSize}"
}
function get_mem_g_size_func(){
local _memSize=$(($(get_mem_m_size_func)/1024))
echo "${_memSize}"
}
echo "[TOMCAT] TBM_HOME=$TBM_HOME"
echo "[TOMCAT] runmode=$runmode"
AVI_MEM_SIZE=$(get_mem_g_size_func)
if [ ${AVI_MEM_SIZE} -gt 7 ]; then #大于7G内存设置为4G
MEM_SIZE="4"
elif [ ${AVI_MEM_SIZE} -gt 4 ]; then #大于4G内存设置为2G
MEM_SIZE="2"
fi
export JAVA_OPTS="-server -Xms512m -Xmx${MEM_SIZE}g -Xss256k -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseG1GC -Dcom.sun.management.jmxremote.port=9089 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -DCmdbType=tbm"