JVM调优-有调优我不用,我就耗着,哎,就是玩儿

Posted 吾仄lo咚锵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM调优-有调优我不用,我就耗着,哎,就是玩儿相关的知识,希望对你有一定的参考价值。

建议先看此博客:还不会JVM,是准备家里蹲吗?

JVM调优参数


参数说明
-Xms初始堆大小(默认物理内存的1/64)
-Xmx最大堆大小(默认物理内存的1/4)
-verbose:gc输出GC情况
-Xmn新生代大小
-XX:NewSize设置新生代大小
-XX:MaxNewSize新生代最大值
-XX:PermSize设置持久代初始值(默认物理内存的1/64)
-XX:MaxPermSize设置持久代最大值
-Xss每个线程的堆栈大小
-XX:ThreadStackSize设置每个线程的堆栈大小
-XX:NewRatio新生代与老年代比值(默认4)
-XX:SurvivorRatioEden区与Survivor区的比值(默认8)
-XX:MaxTenuringThreshold进入老年代年龄
-XX:+AggressiveOpts加快编译
-Xnoclassgc禁用垃圾回收
-XX:+HeapDumpOnOutOfMemoryError内存溢出异常时Dump出当前的堆内存转储快照
-XX:PretenureSizeThreshold大于该值直接进入老年代分配(字节为单位)

并行收集器

参数说明
-XX: +UseSerialGC设置串行收集器
-XX:+UseParallelGC设置并行收集器
-XX:+UseParNewGC设置新生代用并行收集
-XX:+UseParallelOldGC设置老年代用并行收集
-XX:ParallelGCThreads并行收集器线程数
-XX:MaxGCPauseMillis新生代每次垃圾回收最大时间
-XX:+UseAdaptiveSizePolicy自动选择新生代大小和相应的Survivor区比例
-XX:GCTimeRatio设置垃圾回收时间占程序运行时间的百分比
-XX:+ScavengeBeforeFullGCFull GC前调用YGC

CMS收集器

参数说明
-XX:+UseConcMarkSweepGC使用CMS内存收集
-XX:CMSFullGCsBeforeCompaction多少次后进行内存压缩
-XX:+CMSParallelRemarkEnabled降低标记停顿
-XX:+UseCMSCompactAtFullCollectionFull GC时对老年代的压缩
-XX:CMSInitiatingOccupancyFraction使用多少后开始CMS回收(默认92%)
-XX:CMSInitiatingPermOccupancyFraction永久代达到多少比率时触发(默认92%)
-XX:+CMSIncrementalMode设置为增量模式

辅助信息

参数说明
-XX:+PrintGC打印GC信息
-XX:+PrintGCDetails打印GC详细信息
-XX:+PrintGCTimeStamps打印GC的时间戳
-XX:+PrintGCApplicationStoppedTime打印GC时程序暂停时间
-XX:+PrintGCApplicationConcurrentTime打印GC前程序未中断的执行时间
-XX:+PrintHeapAtGC打印GC前后堆的信息
-Xloggc:filename将日志输出到文件(filename)中
-XX:+TraceClassLoading类加载信息
-XX:+TraceClassUnLoading类卸载信息
-XX:+PrintTLAB打印TLAB使用情况

通过上述JVM命令参数,我们可以对JVM相应调整,打印辅助信息等,根据具体的业务需求,选择合适的调优方案,比如:

  1. 吞吐量大优先的配置:
    -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy
    新生代老年代都用并行收集器,新生代设置GC最大时间,无法满足此时间自动调整新生代大小,并且自动选择新生代大小和相应的Survivor区比例。
  2. 响应时间优先的配置
    -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
    设置运行多少次GC以后对内存空间进行压缩、整理,消除并发收集器碎片。

IDEA实战


优先级:全局配置<应用配置

即作用范围越大,优先级越低。

全局配置

Help->Edit Custom VM Options…

idea64.exe.vmoptions文件中配置即可,然后需要重启IDEA

应用配置

Run->Edit Configurations…


测试

就顺着上一步的printGC测试一下。

public class Test {
    public static void main(String[] args) {
        ArrayList<byte[]>list=new ArrayList<>();
        for(int i=0;i<10240;i++){ //10G
            list.add(new byte[1024*1024]); //1M
        }
    }
}

虽然通过JVM参数调优,我们可以优化业务,打印辅助信息debug,但是对于大量代码或者肉眼debug出不来时(明明咋看都是对的 ),人工就显得杯水车薪了,这时需要分析Dump文件(-XX:+HeapDumpOnOutOfMemoryError)安利一款强大的工具——JProfiler,觉得下面麻烦的话再安利一个Dump在线分析网站PerFMa

JProfiler


安装软件

官方下载地址

插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/



注册码可参考这篇博客



IDEA集成

File->Settings->Plugins



Dump分析实战

配置参数:-XX:+HeapDumpOnOutOfMemoryError,OOM时输出Dump文件。


双击这个文件(默认JProfiler打开)


原创不易,请勿转载本不富裕的访问量雪上加霜
博主首页:https://wzlodq.blog.csdn.net/
如果文章对你有帮助,记得一键三连❤

以上是关于JVM调优-有调优我不用,我就耗着,哎,就是玩儿的主要内容,如果未能解决你的问题,请参考以下文章

jvm调优面试怎么答?

技能篇:linux服务性能问题排查及jvm调优思路

JVM调优总结-典型配置举例2

JVM调优

JVM性能调优

JVM性能调优