关注“Java 后端技术全栈”
回复“000”获取大量电子书
首先,还是一张思维导图,看看本文次要内容:
明天来相熟一下,对于 JVM
调优罕用的一些参数。
X 或者 XX 结尾的都是非转标准化参数
意思就是说准表化参数不会变,非标准化参数可能在每个 JDK
版本中有所变动,然而就目前来看 X 结尾的非标准化的参数扭转的也是非常少。
格局:-XX:[+-]<name> 示意启用或者禁用 name 属性。例子:-XX:+UseG1GC(示意启用 G1 垃圾收集器)
堆设置
-Xms
初始堆大小,ms 是 memory start 的简称,等价于-XX:InitialHeapSize
-Xmx
最大堆大小,mx 是 memory max 的简称,等价于参数-XX:MaxHeapSize
留神:在通常状况下,服务器我的项目在运行过程中,堆空间会一直的膨胀与扩张,势必会造成不必要的零碎压力。
所以在生产环境中,
JVM
的Xms
和Xmx
要设置成一样的,可能防止GC
在调整堆大小带来的不必要的压力。
-XX:NewSize=n
设置年老代大小-XX:NewRatio=n
设置年老代和年轻代的比值。如:-XX:NewRatio=3
,示意年老代与年轻代比值为 1:3,年老代占整个年老代年轻代和的 1 /4,默认新生代和老年代的比例 =1:2。-XX:SurvivorRatio=n
年老代中 Eden 区与两个 Survivor 区的比值。留神 Survivor 区有两个,默认是 8,示意
Eden:S0:S1=8:1:1
如:-XX:SurvivorRatio=3
,示意Eden:Survivor
=3:2,一个 Survivor 区占整个年老代的 1 /5。
-XX:MaxPermSize=n
设置长久代大小,
-XX:MetaspaceSize
设置元空间大小。
收集器设置
-XX:+UseSerialGC
设置串行收集器-XX:+UseParallelGC
设置并行收集器-XX:+UseParalledlOldGC
设置并行年轻代收集器-XX:+UseConcMarkSweepGC
设置并发收集器
垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
GC 日志输入到文件里filename
,比方:-Xloggc:/gc.log
并行收集器设置
-XX:ParallelGCThreads=n
设置并行收集器收集时应用的 CPU 数。并行收集线程数。
-XX:MaxGCPauseMillis=n
设置并行收集最大暂停工夫
-XX:GCTimeRatio=n
设置垃圾回收工夫占程序运行工夫的百分比。公式为 1 /(1+n)
-XX:MaxGCPauseMillis=n
设置并行收集最大暂停工夫
并发收集器设置
-XX:+CMSIncrementalMode
设置为增量模式。实用于单 CPU 状况。-XX:ParallelGCThreads=n
设置并发收集器年老代收集形式为并行收集时,应用的 CPU 数。并行收集线程数。
其余
-XX:+PrintCommandLineFlags
查看以后 JVM
设置过的相干参数
Dump 异样快照
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath
堆内存呈现 OOM
的概率是所有内存耗尽异样中最高的,出错时的堆内信息对解决问题十分有帮忙。
所以给 JVM
设置这个参数 (-XX:+HeapDumpOnOutOfMemoryError
),让JVM
遇到 OOM
异样时能输入堆内信息,并通过(-XX:+HeapDumpPath
)参数设置堆内存溢出快照输入的文件地址。
这对于特地是对相隔数月才呈现的 OOM
异样尤为重要。
-Xms10M -Xmx10M -Xmn2M -XX:SurvivorRatio=8
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError
示意产生 OOM 后
,运行jconsole.exe
程序。
这里能够不必加“”,因为 jconsole.exe
门路 Program Files 含有空格。利用这个参数,咱们能够在零碎 OOM
后,自定义一个脚本,能够用来发送邮件告警信息,能够用来重启零碎等等。
-XX:OnOutOfMemoryError="C:Program FilesJavajdk1.8.0_151binjconsole.exe"
8G 内存的服务器该如何设置
java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:
16m
-Xmx3500m
设置 JVM
最大可用内存为 3550M。
-Xms3500m
设置 JVM
促使内存为 3550m
。此值能够设置与-Xmx
雷同,以防止每次垃圾回收实现后 JVM 从新分配内存。-Xmn2g
设置年老代大小为2G
。
整个堆大小 = 年老代大小 + 年轻代大小 + 办法区大小
-Xss128k
设置每个线程的堆栈大小。
JDK1.5
当前每个线程堆栈大小为 1M,以前每个线程堆栈大小为 256K。更具利用的线程所需内存大小进行调整。在雷同物理内存下,减小这个值能生成更多的线程。然而操作系统对一个过程内的线程数还是有限度的,不能有限生成,经验值在 3000~5000 左右。
-XX:NewRatio=4
设置年老代(包含 Eden 和两个 Survivor 区)与年轻代的比值(除去长久代)。设置为 4,则年老代与年轻代所占比值为 1:4,年老代占整个堆栈的 1 /5。
-XX:SurvivorRatio=4
设置年老代中 Eden 区与 Survivor 区的大小比值。
设置为 4,则两个 Survivor 区与一个 Eden 区的比值为 2:4,一个 Survivor 区占整个年老代的 1 /6 -XX:MaxPermSize=16m
设置长久代大小为 16m。
-XX:MaxTenuringThreshold=0
设置垃圾最大年龄。
如果设置为 0 的话,则年老代对象不通过 Survivor 区,间接进入年轻代。对于年轻代比拟多的利用,能够提高效率。如果将此值设置为一个较大值,则年老代对象会在 Survivor 区进行屡次复制,这样能够减少对象再年老代的存活工夫,减少在年老代即被回收的概论。
这是最根本的 JVM 参数,不要感觉很干燥,因为大神都是一步一步来的,前面实战中你就晓得这些参数的重要性了。
敬请期待后续调优实战!
举荐浏览:
《Spring Cloud 与 Docker 微服务架构实战》.pdf
《Go 语言实战》.pdf
《分布式 Java 利用根底与实际》.pdf