Java-技术专区-JVM调优常用参数

导读:本篇文章讲解 Java-技术专区-JVM调优常用参数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1.调优的目的

  • 1.控制GC的行为:
    GC是一个后台处理,但是它也是会消耗系统性能的,因此经常会根据系统运行的程序的特性来更改GC行为。

  • 2.控制JVM堆栈大小:
    JVM在内存分配上不需要你修改,但是当你的程序新生代对象在某个时间段产生的比较多的时候,就需要控制新生代的堆大小,同时,还要需要控制总的JVM大小避免内存溢出。

  • 3.控制JVM线程的内存分配:
    如果是多线程程序,产生线程和线程运行所消耗的内存也是可以控制的,需要通过一定时间的观测后,配置最优结果。

2、GC 事件分类

       根据垃圾收集回收的区域不同,垃圾收集主要分为:

  • 2.1 Young GC(又称Minor GC、YGC)
    新生代内存的垃圾收集事件称为 Young GC(又称 Minor GC),当 JVM 无法为新对象分配在新生代内存空间时总会触发 Young GC。

    比如 Eden 区占满时,新对象分配频率越高,Young GC 的频率就越高。

    Young GC 每次都会引起全线停顿(Stop-The-World),暂停所有的应用线程,停顿时间相对老年代 GC 造成的停顿,几乎可以忽略不计。

  • 2.2 Old GC(又称Major GC)
    只清理老年代空间的 GC 事件,只有 CMS 的并发收集是这个模式。

  • 2.3 Full GC
    清理整个堆的GC事件,包括新生代、老年代、元空间等 。

  • 2.4 Mixed GC
    清理整个新生代以及部分老年代的 GC,只有 G1 有这个模式。

3、常用参数总结

3.1 堆设置

-Xms:初始堆大小

-Xmx:最大堆大小

-Xmn:新生代大小
-Xss:线程堆栈大小,默认为1M
-XX:NewRatio=n:设置新生代和年老代的比值,默认为1:2。如为3,表示新生代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。默认为8:2
如:6,表示Eden:Survivor=6:4,一个Survivor区占整个年轻代的2/10 -XX:MaxPermSize=n:设置持久代大小

3.2 收集器设置

-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器

-XX:+UseG1GC:使用G1做为GC收集器
-XX:+UseConcMarkSweepGC:设置并发收集器CMS

3.3 垃圾回收统计信息

-XX:+PrintGC:输出形式:
[GC 118250K->113543K(130112K), 0.0094143 secs]
[Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails:输出形式:
[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
[GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]

-XX:+PrintGCTimeStamps:打印GC停顿耗时
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间.
-XX:+PrintHeapAtGC:打印GC前后的详细堆栈信息
-Xloggc:filename:把相关日志信息记录到文件以便分析.

3.4 并行收集器参数设置

-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。STW期间,并行GC线程数

-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间

-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

3.5 并发收集器设置

-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。

-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数

4、实例

A/B-Test jvm调试,默认情况下,系统压测800qps,优化后能达到1000

优化参数:

-XX:NewRatio=1:设置新生代和年老代的比值为2:1
-Xss:线程堆栈大小,默认为1M,调整为512K
-XX:+UseG1GC:使用G1做为GC收集器
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间为20ms

 
 
JAVA

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/70204.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!