JVM常用参数

#===========================================================
# Jetty start.jar arguments
#===========================================================



#===========================================================
# If the arguements in this file include JVM arguments 
# (eg -Xmx512m) or JVM System properties (eg com.sun.???),
# then these will not take affect unless the --exec 
# parameter is included or if the output from --dry-run
# is executed like:
#   eval $(java -jar start.jar --dry-run)
#
# Below are some recommended options for Sun's JRE
#-----------------------------------------------------------
--exec

-Dfile.encoding=UTF-8
-Djava.io.tmpdir=/tmp
-Djava.net.preferIPv6Addresses=false
-Duser.timezone=GMT+08

# 这个参数很重要,兼容老代码
-Dcore.step=app

# 设置jconsole远程连接
#-Dcom.sun.management.jmxremote=true
#-Djava.rmi.server.hostname=10.64.12.152
#-Dcom.sun.management.jmxremote.port=50013
#-Dcom.sun.management.jmxremote.authenticate=false

-server
-Xmx5g
-Xms5g
-Xss512k
#-Xmn1g
-XX:SurvivorRatio=8
-XX:NewRatio=1
-XX:PermSize=768m
-XX:MaxPermSize=1024m
-XX:MaxTenuringThreshold=15

-XX:+HeapDumpOnOutOfMemoryError
#-XX:ReservedCodeCacheSize=128m
#-XX:InitialCodeCacheSize=128m

#-XX:+DisableExplicitGC
#-XX:+UseParallelGC
-XX:ParallelGCThreads=4
#-XX:+UseParallelOldGC
#-XX:+UseAdaptiveSizePolicy

# -Dorg.apache.jasper.compiler.disablejsr199=true
# -Dcom.sun.management.jmxremote
# -Dorg.eclipse.jetty.util.log.IGNORED=true
# -Dorg.eclipse.jetty.LEVEL=DEBUG
# -Dorg.eclipse.jetty.util.log.stderr.SOURCE=true
# -verbose:gc

#-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
#-XX:+PrintGCTimeStamps
#-XX:+PrintGCApplicationConcurrentTime
#-XX:+PrintGCApplicationStoppedTime
#-XX:+PrintHeapAtGC
-XX:+PrintTenuringDistribution
-XX:+PrintCommandLineFlags

-XX:+UseConcMarkSweepGC
#-XX:+UseParNewGC
-XX:ParallelCMSThreads=4
-XX:+CMSClassUnloadingEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:+ExplicitGCInvokesConcurrent
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=80

-XX:+PrintFlagsFinal
-XX:+PrintGCCause
-XX:+ScavengeBeforeFullGC
-XX:+CMSParallelRemarkEnabled
-XX:+CMSScavengeBeforeRemark
-XX:+CMSParallelInitialMarkEnabled
-XX:+ParallelRefProcEnabled
-XX:+AlwaysPreTouch
-XX:HeapDumpPath=/var/xxx/logs/xxx/xxx.heapdump.hprof$(date +%Y%m%d%H%M)
#-----------------------------------------------------------


#===========================================================
# Start classpath OPTIONS.
#-----------------------------------------------------------
OPTIONS=Server,plus,annotations,jsp
#-----------------------------------------------------------


#===========================================================
# Configuration files.
#-----------------------------------------------------------
/opt/xxx/apps/xxx/work/deploy/conf/jetty8.xml
#===========================================================
8G机器:

-Xmx5g
-Xms5g
-Xss512k
-XX:SurvivorRatio=8
-XX:NewRatio=1
-XX:PermSize=768m


-XX:ParallelGCThreads=4
-XX:CMSFullGCsBeforeCompaction=0
-XX:CMSInitiatingOccupancyFraction=80

-XX:+ExplicitGCInvokesConcurrent
-XX:+PrintFlagsFinal
-XX:+PrintGCCause
-XX:+ScavengeBeforeFullGC
-XX:+CMSParallelRemarkEnabled
-XX:+CMSScavengeBeforeRemark
-XX:+CMSParallelInitialMarkEnabled
-XX:+ParallelRefProcEnabled
-XX:+AlwaysPreTouch
-XX:HeapDumpPath=/var/xxx/logs/xxx/xxx.heapdump.hprof$(date +%Y%m%d%H%M)
16G机器:

-Xmx10g
-Xms10g

-Xmn6g // 之前7 // 注释掉
-Xss512k

-XX:SurvivorRatio=8

#-XX:NewRatio=2 // 注释掉 // 打开改成1
-XX:PermSize=768m


#-XX:+DisableExplicitGC
-XX:ParallelGCThreads=8

#-XX:+UseParNewGC
-XX:ParallelCMSThreads=8
-XX:CMSFullGCsBeforeCompaction=0
-XX:CMSInitiatingOccupancyFraction=80
-XX:+ExplicitGCInvokesConcurrent
-XX:+PrintFlagsFinal
-XX:+PrintGCCause
-XX:+ScavengeBeforeFullGC
-XX:+CMSParallelRemarkEnabled
-XX:+CMSScavengeBeforeRemark
-XX:+CMSParallelInitialMarkEnabled
-XX:+ParallelRefProcEnabled
-XX:+AlwaysPreTouch
-XX:HeapDumpPath=/var/xxx/logs/xxx/xxx.heapdump.hprof$(date +%Y%m%d%H%M)
#-XX:+DisableExplicitGC // System GC是保护机制(如堆外内存满时清理它的堆内引用对象),禁了system.gc() 未必是好事,只要没用什么特别烂的类库,真有人调了总有调的原因
-XX:ParallelGCThreads=4 // 并行回收线程数
#-XX:+UseParNewGC // cms默认就是了,没必要显示打开
-XX:CMSFullGCsBeforeCompaction=0 // 默认为0,即每次full gc都对老生代进行碎片整理压缩,老生代碎片过大无法分配空间给新晋升的大对象,堆外内存满,这些特殊情况里发生,所以设为每次都进行碎片整理是合适的。
-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly // 监控系统会通过JMX监控内存达到90%的状况,所以设置让它80%就开始跑了,早点开始也能减少Full GC等意外情况(概念重申,这种主动的CMS GC,和JVM的老生代、永久代、堆外内存完全不能分配内存了而强制Full GC是不同的概念)。
为了让这个设置生效,还要设置-XX:+UseCMSInitiatingOccupancyOnly,否则80%只被用来做开始的参考值,后面还是JVM自己算。

-XX:+ExplicitGCInvokesConcurrent // full gc时,使用CMS算法,不是全程停顿,必选。
-XX:+PrintFlagsFinal // 打印参数值,有的版本默认打开,有的版本没有打开,为确保打开显示打开
-XX:+PrintGCCause // 打印产生GC的原因,比如AllocationFailure什么的,在JDK8已默认打开,JDK7要显式打开一下。
-XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark // cmsgc之前进行一次ygc,减少堆扫描,两个参数一般配套使用
-XX:+CMSParallelInitialMarkEnabled // cms初始标记阶段,1.7 默认是串行的,通过显示开启变为并行
-XX:+ParallelRefProcEnabled // 同上(并行回收虚引用)

-XX:+AlwaysPreTouch // JAVA进程启动的时候,我们可以为JVM指定合适的内存大小,但是这些内存操作系统并没有真正的分配给JVM,而是等JVM访问这些内存的时候,才真正分配,这样会造成以下问题:
 1. 第1次YGC之前Eden区分配对象的速度较慢;
 2. YGC的时候,Young区的对象要晋升到Old区的时候,这个时候需要操作系统真正分配内存,这样就会加大YGC的停顿时间;
 这个参数可以让启动时访问并置零内存页面,启动时慢些,运行时流畅
-XX:HeapDumpPath=/var/xxx/logs/xxx/xxx.heapdump.hprof$(date +%Y%m%d%H%M)

转载于:https://my.oschina.net/u/1000241/blog/3098349

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值