我们知道:jvm的内存存储以及内存分配,主要集中在方法区、堆。针对这两块,给出的调优参数如下:
一:调优参数初始化堆大小(有的叫jvm内存): -Xms256M //256M指的是具体大小,初始化堆大小=最大堆大小,可以在一定程度上在GC后重新分配内存
最大堆大小(有的叫jvm内存): -Xmx256M //初始化堆大小=最大堆大小,可以在一定程度上在GC后重新分配内存
年轻代大小: -Xmn512M //设置堆里面的年轻代大小。整个JVM内存的大小=年轻代+老年代+永久代(jdk1.8之后叫元空间)。永久代一般固定大小64M。所以增大年轻代,减小老年代大小。此值对系统性能影响较大。Sun推荐配置为整个堆的3/8
元空间初始大小: -XX:MatespaceSize=100M //该值是设置方法区的元空间初始化大小,该值越大,触发GC时间就越晚。
元空间内存最大值: -XX:MaxMatespaceSize=100M //该值是设置方法区的元空间最大值,如果不设置,默认是系统的 内存大小,设置了,可以限制元空间无限的使用服务器内存,影响其他程序。
堆栈信息: -XX:OmitStackTraceInFastThrow //这个是用来解决重复异常不打印堆信息的设置。设置了,便会重复打印堆信息
二:用于启动java的jar包服务的linux命令(后台启动)
nohup java -server -Xms256M -Xmx256M -Xmn512M -XX:MatespaceSize=64M -XX:MaxMatespaceSize=100M -XX:OmintSackTraceInFastThrow -jar XXX.jar --spring.config.loacal=/xxpath1/xxpath2/ --logging.config=/xxpath1/logback.xml > ${logpath} 2 > &1 &
优化2:提取中间变量来替代jvm的调优参数:
# `pwd` 执行系统命令并获得结果
BASE_PATH=`pwd`
# 外部配置文件绝对目录,如果是目录需要/结尾,也可以直接指定文件
# 如果指定的是目录,spring则会读取目录中的所有配置文件
CONFIG_DIR=${BASE_PATH}"/config/"
# 项目日志输出绝对路径
LOG_DIR=${BASE_PATH}"/logs"
LOG_FILE="${APPLICATION}.log"
LOG_PATH="${LOG_DIR}/${LOG_FILE}"
JAVA_OPT="-server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
所以完整命令(注意你的系统是否识别nohup命令,如果不识别,缺少安装插件,网上搜 linux nohup即可):
nohup java ${JAVA_OPT} -jar XXX.jar --spring.config.location=${CONFIG_DIR} --logging.config=${CONFIG_DIR}logback.xml > ${LOG_PATH} 2>&1 &