jvm性能调优总结

    科技2024-02-22  92

    性能监控与调优

    JVM内存结构

    堆区:{Young[(s0+s1)+Eden] + Old}

    非堆区:{Metaspace[CCS + CodeCache]}

    垃圾回收算法

       枚举根节点,做可达性分析

          根节点:类加载器、Thread、虚拟机栈的本地变量表、static成员、常量引用、本地方法栈的变量等等

          回收算法:

    1.标记清除:分为“标记”和“清除”两个阶段,首先标记出所有需要回收等对象,在完成标记后统一回收。

               缺点:效率不高。会产生碎片,碎片太多会导致提前GC。

          2.复制

               缺点:空间利用率低。

          3.标记整理

               缺点:整理内存比较耗时。

          JVM采用分代垃圾回收

               Young区采用复制法

               Old采用标记清除或标记整理

    垃圾收集器

    串行收集器Serial:Serial、Serial Old

    并行收集器Parallel:Parallel Scavenge、Parallel Old,吞吐量优先

    并发收集器 Concurrent: CMS、G1,响应时间优先

    JVM的参数类型 标准参数

    -help

    -server -client

    -version -showversion

    -cp -classpath

    2.X参数(非标准化参数)

    -Xint:解释执行

    -Xcomp:第一次使用就编译成本地代码

    -Xmixed:混合模式,JVM自己来决定是否编译成本地代码

    3.XX参数(非标准化参数、相对不稳定、主要用于JVM调优和Debug)

      非Boolean类型

    格式:-XX:<name>=<value> 表示name属性的值是value

                       例:-XX:MaxGCPauseMillis=500

                       XX:GCTimeRatio=19

              Boolean类型

                  格式:-XX:[+-]<name> 表示启用或禁用name属性

                       例:-XX:+UseConcMarkSweepGC

              -XX:+UseG1GC

              以下特殊,不是X参数,而是XX参数

    -Xmx = -XX:InitialHeapSize

      -Xms = -XX:MaxHeapSize

    运行时JVM参数查看

    -XX:+PrintFlagslnitial 查看初始值

    -XX:+PrintFlagsFinal 查看最终值

    -XX:+UnlockExperimentalVMOptions 解锁实验参数

    -XX:+UnlockDiagnosticVMOptions 解锁诊断参数

    -XX:+PrintCommandLineFlags 打印命令行参数

    jinfo命令

    查看最大内存

    jinfo -flag MaxHeapSize [进程号]

    查看垃圾回收器

      jinfo -flag UseConcMarkSweepGC [进程号]

    jinfo -flag UseG1GC [进程号]

    jinfo -flag UseParallelGC [进程号]

    jstat查看虚拟机统计信息

    类加载信息

      例: jstat -class [进程号] [毫秒] [输出次数]

    垃圾回收信息

      例:jstat -gc [进程号] [毫秒] [输出次数]

    JIT编译信息

      例:jstat -compiler [进程号]

    jmap+MAT内存溢出

    堆内存溢出: 对象   

    -Xmx32M -Xms32M

    非堆内存溢出: 类  

    -XX:MetaspaceSize=32M  -XX:MaxMetaspaceSize=32M

               解决思路:

                    分析内存映像文件(内存泄漏或者内存分配不足)

                    自动导出内存映像文件:

                         -XX:+HeapDumpOnOutOfMemoryError

                         -XX:HeapDumpPath=./

                    手动导出:

                         jmap -dump:format=b,file=heap.hprof [进程号]

               MAT(内存映像文件分析工具,网上搜索下载,将生成的.hprof文件导入)

    jstack死循环与死锁

    jstack [进程号] > [进程号].txt (重定向到txt中,方便分析

    Processed: 0.011, SQL: 9