一.文章介绍

       首先带我们先来了解下JVM的内存结构:

 jvm剖析到性能优化

  1. Metaspance =  Class、Package、Method、Field、字节码、常量池、符号引用等等。
  2. CCS = 32位指针的Class(压缩类空间)
  3. CodeCache = JIT编译后的本地代码、JNI使用的C代码

二JNI.基于JDK命令行工具的监控

   1.JVM的参数类型 

             1.标准参数:功能和输出的参数都是很稳定的 在未来的JVM版本中不会改变 可以使用java -help检索出所有的标准参数

             2.X参数:非标准化参数 在未来的版本可能会改变 所有的参数都用-X开始 可以使用java -X检索

                               -Xint:解释执行
                               -Xcomp :第一次使用就编译成本地代码
                               -Xmixed :混合模式,JVM自己来决定是否编译成本地代码

             3.XX参数:非标准 很长一段时间不会列出来 用于JVM开发的debug和调优

                                boolean : -XX:+UseConcMarkSweepGC  :启用CMS垃圾收集器
                                                     -XX:+UseG1GC  :启用G1 垃圾收集器
                                非boolean类型 : -XX:MaxGCPauseMillis=500   //young区GC的回收的时间
                                                                 -XX:GCTimeRatio=19        //吞吐量 也就是垃圾回收时间和非垃圾回收时间的比例   
                                注意:-Xms 等价于 -XX:InitialHeapSize       //jvm初始堆内存  1/64
                                            -Xmx 等价于 -XX:MaxHeapSize           //jvm最大堆内存  1/4
                                             -xss 等价于 -XX:TreadStackSize        //堆栈的大小

   2.查看JVM运行时参数

          -XX:+PrintFlagsInitial             //查看初始值
         -XX:+PrintFlagsFinal               //查看最终值
         -XX:+UnlockExperimentslVMOptions   //解锁实验参数
                  jps:撞门查看java进程
                  jinfo:查看正在运行jvm参数
                             例如:jinfo -flag MaxHeapSize pid
                                         jinfo -flag UseG1GC pid   
                                         jinfo -flag UseConcMarkSweepGC pid
                                         jinfo -flag UseParallelGC

   3.jstat查看JVM统计信息

               option:-class,-compiler,-gc,-printcompilation

                              -class: jstat -class 23029 1000 10

                              -gc: jstat -gc 23029

                              -gc输出的结果:
                                                        S0C、S1C、SOU、S1U:S0和S1的总量与使用量
                                                        EC、EU:Eden区总量与使用量
                                                        OC、OU:Old区总量与使用量
                                                        MC、MU:Metaspace区总量与使用量
                                                        CCSC、CCSU:压缩类空间总量与使用量
                                                        YGC、YGCT:YoungGC的次数与时间
                                                        FGC、FGCT:FullGC的次数与时间
                                                        GCT:总的GC时间
                           
                               -compiler、-printcompilation:jstat -compiler 23029

   4.演示内存溢出

jvm剖析到性能优化

jvm剖析到性能优化

5.如何导出内存映像文件

          1.内存溢出自动导出(不建议使用)
                 -XX:+HeapDumpOnOutOfMemoryError
                  -XX:HeapDumpPath=./

           2.使用jmap命令手动导出
                  jmap -dump:format=b,file=heap.hprof XXX

6.MAT分析内存溢出

           jvm剖析到性能优化

 

7.jstack与线程的状态

jstack  XXXX

top XXX -p  -H

jvm剖析到性能优化

 

      线程状态图:

      java线程状态:

            NEW 、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED

 

jvm剖析到性能优化

https://mp.weixin.qq.com/s/GsxeFM7QWuR--Kbpb7At2w

 

8.jstack实战死循环与死锁

jvm剖析到性能优化

 

 

三.基于JVisualVM的可视化监控

         1.监控本地java进程

jvm剖析到性能优化

https://visualvm.github.io/pluginscenters.html 

https://visualvm.github.io/documentation.html

         2.监控远程的java进程

JAVA_OPTS="$JAVA_OPTS
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.net.preferIPv4Stack=true
-Djava.rmi.server.hostname=10.110.3.62"

 

四.基于Btrace的监控调试

五.Tomcat性能监控与调优

六.JVM层GC调优

七.JVM字节码与Java代码层调优

 

 

        

相关文章: