飞道的博客

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

456人阅读  评论(0)

建议先看此博客:还不会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:SurvivorRatio Eden区与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:+ScavengeBeforeFullGC Full GC前调用YGC

CMS收集器

参数 说明
-XX:+UseConcMarkSweepGC 使用CMS内存收集
-XX:CMSFullGCsBeforeCompaction 多少次后进行内存压缩
-XX:+CMSParallelRemarkEnabled 降低标记停顿
-XX:+UseCMSCompactAtFullCollection Full 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/
如果文章对你有帮助,记得一键三连❤


转载:https://blog.csdn.net/qq_45034708/article/details/116295969
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场