日常运维之JVM参数调优

JVM参数语法规则:

-XX:+<option> '+'表示启用该选项
-XX:-<option> '-'表示关闭该选项
-XX:<option>=<number># 可跟随单位,例如:'m'或'M'表示兆字节;'k'或'K'千字节;'g'或'G'千兆字节。32K与32768是相同大小的。
-XX:<option>=<string># 通常用于指定一个文件、路径或一系列命令列表。例如:-XX:HeapDumpPath=./dump.core

JVM参数调优:

JVM参数调优选项
选项默认值描述
-XX:MaxNewSize=size1.3.1 Sparc: 32m
1.3.1 x86: 2.5m
新生代占整个堆内存的最大值。从Java1.4开始, MaxNewSize成为 NewRatio的一个函数
-XX:MaxPermSize=64mJava1.5以后::64 bit VMs会增大预设值的30%
1.4 amd64::96m
1.3.1 -client: 32m
其他默认 64m
Perm(俗称方法区)占整个堆内存的最大值。
-XX:NewRatio=2Sparc -client: 8 
x86 -server: 8 
x86 -client: 12 -client: 4 (1.3) 8 (1.3.1+) 
x86: 12 
其他:2
新生代和年老代的堆内存占用比例。 例如2表示新生代占年老代的1/2,占整个堆内存的1/3。
-XX:NewSize=2m5.0以后: 64 bit Vms 会增大预设值的30%
x86: 1m
x86, 5.0以后: 640k
其他:2.125m
新生代预估上限的默认值。
-XX:SurvivorRatio=8Solaris amd64: 6 
Sparc in 1.3.1: 25 
Solaris platforms 5.0以前: 32 
其他:8
Eden与Survivor的占用比例。例如8表示,一个survivor区占用 1/8 的Eden内存,即1/10的新生代内存,为什么不是1/9? 因为我们的新生代有2个survivor,即S1和S22。所以survivor总共是占用新生代内存的 2/10,Eden与新生代的占比则为 8/10。
JVM参数调优选项
-XX:-CITime默认启用打印JIT编译器编译耗时。
-XX:ErrorFile=./hs_err_pid.logJava1.6引入如果JVM crashed,将错误日志输出到指定文件路径。
-XX:-ExtendedDTraceProbesJava6引入,限于solaris
默认关闭
启用dtrace诊断
-XX:HeapDumpPath=./java_pid.hprof默认是java进程启动位置堆内存快照的存储文件路径。
-XX:-HeapDumpOnOutOfMemoryError默认关闭在java.lang.OutOfMemoryError 异常出现时,输出一个dump.core文件,记录当时的堆内存快照(见 -XX:HeapDumpPath 的描述)
-XX:OnError=”\;\”Java1.4引入当java每抛出一个ERROR时,运行指定命令行指令集。指令集是与OS环境相关的,在Linux下多数是.sh脚本,windows下是.bat批处理。
-XX:OnOutOfMemoryError=”\;\”Java1.4.2 update 12和Java6时引入当第一次发生java.lang.OutOfMemoryError 时,运行指定命令行指令集。指令集是与OS环境相关的,在linux下多数是.sh脚本,windows下是.bat批处理。
-XX:-PrintClassHistogram默认关闭在Windows下, 按ctrl-break或Linux下是执行kill -3(发送SIGQUIT信号)时,打印class柱状图。 
jmap -histo pid也实现了相同的功能。
-XX:-PrintConcurrentLocks默认关闭在thread dump的同时,打印java.util.concurrent的锁状态。
jstack -l pid 也同样实现了同样的功能。
-XX:-PrintCommandLineFlagsJava1.5 引入,默认关闭Java启动时,往stdout打印当前启用的非稳态jvm options。 
例如: 
-XX:+UseConcMarkSweepGC 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:+DoEscapeAnalysis
-XX:-PrintCompilation默认关闭往stdout打印方法被JIT编译时的信息。
-XX:-PrintGC默认关闭开启GC日志打印。
显示结果例如: 
[Full GC 131115K->7482K(1015808K), 0.1633180 secs] 
该选项可通过
com.sun.management.HotSpotDiagnosticMXBean API 和 jconsole 动态启用。
-XX:-PrintGCDetailsJava1.4引入,默认关闭打印GC回收的详细信息。 
显示结果例如: 
[Full GC (System) [Tenured: 0K->2394K(466048K), 0.0624140 secs] 30822K->2394K(518464K), [Perm : 10443K->10443K(16384K)], 0.0625410 secs] [Times: user=0.05 sys=0.01, real=0.06 secs] 
该选项可通过
com.sun.management.HotSpotDiagnosticMXBean API 和 jconsole 动态启用。
-XX:-PrintGCTimeStamps默认关闭打印GC停顿耗时。 
显示结果例如: 2.744: [Full GC (System) 2.744: [Tenured: 0K->2441K(466048K), 0.0598400 secs] 31754K->2441K(518464K), [Perm : 10717K->10717K(16384K)], 0.0599570 secs] [Times: user=0.06 sys=0.00, real=0.06 secs] 
该选项可通过
com.sun.management.HotSpotDiagnosticMXBean API 和 jconsole 动态启用。
-XX:-PrintTenuringDistribution默认关闭打印对象的存活期限信息。 
显示结果例如: [GC Desired survivor size 4653056 bytes, new threshold 32 (max 32) - age 1: 2330640 bytes, 2330640 total - age 2: 9520 bytes, 2340160 total 204009K->21850K(515200K), 0.1563482 secs] 
Age1,2表示在第1和2次GC后存活的对象大小。
-XX:-TraceClassLoading默认关闭打印class装载信息到stdout。记Loaded状态。 
例如: [Loaded java.lang.Object from /opt/taobao/install/jdk1.6.0_07/jre/lib/rt.jar]
-XX:-TraceClassLoadingPreorder1.4.2引入,默认关闭按class的引用/依赖顺序打印类装载信息到stdout。不同于 TraceClassLoading,本选项只记 Loading状态。 
例如: [Loading java.lang.Object from /home/confsrv/jdk1.6.0_14/jre/lib/rt.jar]
-XX:-TraceClassResolution1.4.2引入,默认关闭打印所有静态类,常量的代码引用位置。用于debug。 
例如: 
RESOLVE java.util.HashMap java.util.HashMapEntry
-XX:-TraceClassUnloading默认关闭打印class的卸载信息到stdout。记Unloaded状态。
-XX:-TraceLoaderConstraintsJava1.6 引入,默认关闭打印class的装载策略变化信息到stdout。
装载策略变化是实现classloader隔离/名称空间一致性的关键技术。
-XX:+PerfSaveDataToFile默认启用当java进程因java.lang.OutOfMemoryError 异常或crashed 被强制终止后,生成一个堆快照文件。
-XX:ParallelGCThreads=n默认值:随JVM运行平台不同而异配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseCompressedOops32位默认关闭,64位默认启动使用compressed pointers。这个参数默认在64bit的环境下默认启动,但是如果JVM的内存达到32G后,这个参数就会默认为不启动,因为32G内存后,压缩就没有多大必要了,要管理那么大的内存指针也需要很大的宽度了
-XX:+AlwaysPreTouch默认关闭在JVM 初始化时预先对Java堆进行摸底。
-XX:AllocatePrefetchDistance=n默认值取决于当前JVM 设置为对象分配设置预取距离。
-XX:InlineSmallCode=n默认值取决于当前JVM 设置当编译的代码小于指定的值时,内联编译的代码。
-XX:MaxInlineSize=35默认值:35内联方法的最大字节数。
-XX:FreqInlineSize=n默认值取决于当前JVM 设置内联频繁执行的方法的最大字节码大小。
-XX:LoopUnrollLimit=n默认值取决于当前JVM 设置代表节点数目小于给定值时打开循环体。
-XX:InitialTenuringThreshold=7默认值:7设置初始的对象在新生代中最大存活次数。
-XX:MaxTenuringThreshold=n默认值:15,最大值:15设置对象在新生代中最大的存活次数,最大值15,并行回收机制默认为15,CMS默认为4。
-Xloggc:默认关闭输出GC 详细日志信息至指定文件。
-XX:-UseGCLogFileRotation默认关闭开启GC 日志文件切分功能,前置选项 -Xloggc
-XX:NumberOfGClogFiles=1必须>=1,默认值:1设置切分GC 日志文件数量,文件命名格式:.0, .1, …, .n-1
-XX:GCLogFileSize=8K必须>=8K,默认值:8KGC日志文件切分大小。
JVM  GC参数选项
-XX:+UseG1GC默认关闭使用G1垃圾处理器
-XX:MaxGCPauseMillis=n默认值:4294967295设置并行收集最大暂停时间,这是一个理想目标,JVM将尽最大努力来实现它。
-XX:InitiatingHeapOccupancyPercent=n默认值:45启动一个并发垃圾收集周期所需要达到的整堆占用比例。这个比例是指整个堆的占用比例而不是某一个代(例如G1),如果这个值是0则代表‘持续做GC’。默认值是45
-XX:NewRatio=n默认值:2设置年轻代和年老代的比值。例如:值为3,则表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4。
-XX:SurvivorRatio=n默认值:8年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxTenuringThreshold=n默认值:15设置垃圾最大存活阀值。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
-XX:ParallelGCThreads=n默认值:随JVM运行平台不同而异配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:ConcGCThreads=n默认值:随JVM运行平台不同而异并行垃圾收集时,使用的线程数。默认值和JVM运行的平台有关。
-XX:G1ReservePercent=n默认值:10设置保留用来做假天花板以减少晋升(新生代对象晋升到老生代)失败可能性的堆数目。
-XX:G1HeapRegionSize=n默认值根据堆大小而定使用G1垃圾回收器,java堆被划分成统一大小的区块。这个选项设置每个区块的大小。最小值是1Mb,最大值是32Mb。

其他GC设置如下:

(1)禁用System.gc() 
  -XX:+DisableExplicitGC  禁止程序中调用System.gc(), 加了此参数, 程序若有调用, 返回的空函数调用 
   System.gc()的调用, 会使用FullGC的方式回收整个堆而会忽略CMS或G1等相关回收器 
(2)System.gc()使用并发回收 
  -XX:+ExplicitGCCinvokesConcurrent   使用并发方式处理显示的gc, 即开启后, System.gc()这种显示GC才会并发的回收, (CMS, G1)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM参数调优是为了提高Java应用程序的性能和稳定性。下面是一些常见的JVM参数调优的思路和建议: 1. 堆内存设置: - -Xms: 初始堆大小,建议与-Xmx相同,避免堆大小的动态调整。 - -Xmx: 最大堆大小,根据应用程序的需求进行设置,避免频繁的垃圾回收。 2. 垃圾回收器选择: - -XX:+UseParallelGC: 使用并行垃圾回收器,适合多核CPU和高吞吐量应用。 - -XX:+UseConcMarkSweepGC: 使用CMS垃圾回收器,适合响应时间优先的应用。 - -XX:+UseG1GC: 使用G1垃圾回收器,适合大内存应用和低延迟要求。 3. 垃圾回收参数调优: - -XX:NewRatio: 设置新生代和老年代的比例,默认为2,可以根据应用程序的对象生命周期进行调整。 - -XX:SurvivorRatio: 设置Eden区和Survivor区的比例,默认为8,可以根据对象的存活率进行调整。 - -XX:MaxTenuringThreshold: 设置对象进入老年代的年龄阈值,默认为15,可以根据对象的存活率和内存情况进行调整。 4. 线程相关参数: - -Xss: 设置线程栈的大小,默认为1M,可以根据应用程序的线程数量进行调整。 - -XX:ParallelGCThreads: 并行垃圾回收的线程数量,默认为CPU核心数的1/8,可以根据CPU和内存情况进行调整。 5. 其他常用参数: - -XX:+UseCompressedOops: 使用压缩指针,可以减少对象引用的内存消耗。 - -XX:+DisableExplicitGC: 禁用显示调用System.gc()方法,避免不必要的垃圾回收。 以上是一些常见的JVM参数调优策略,具体的调优效果和最佳参数设置还需要根据应用程序的实际情况进行测试和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值