关于java:手把手教你设置JVM调优参数

40次阅读

共计 2663 个字符,预计需要花费 7 分钟才能阅读完成。

关注“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

留神:在通常状况下,服务器我的项目在运行过程中,堆空间会一直的膨胀与扩张,势必会造成不必要的零碎压力。

所以在生产环境中,JVMXmsXmx要设置成一样的,可能防止 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:filenameGC 日志输入到文件里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

正文完
 0