zoukankan      html  css  js  c++  java
  • Java-技术专区-JVM调优常用参数

    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
     
  • 相关阅读:
    添加一个下拉框到DataGrid
    .NET2.0抓取网页全部链接 (转)
    C# 中 enum的总结
    NAT和NAT穿透
    [转]为什么在DllMain里不能调用LoadLibrary和FreeLibrary函数?
    Win32 SDK 创建加速键表。
    转了无数次。继续转。 就是关于TCP的侦活
    浅析Windows操作系统中的线程局部存储(TLS)机制
    API函数ShellExecute与ShellExecuteEx用法
    转:FreeLibraryAndExitThread DLL中线程的安全退出
  • 原文地址:https://www.cnblogs.com/liboware/p/12973227.html
Copyright © 2011-2022 走看看