Day19 JVM调优分析

JVM调优分析

  • jmap 查看内存信息,实例个数以及占用内存大小

    bash
    复制代码
    # 查看java进程信息 jps # 查看当前存活的实例,执行过程中可能会触发一次full gc jmap -histo:live 进程ID > outputDir # 将内存信息输出到文件 # 输出文件内容有四列 # num instances bytes class name # 序号 实例数 占用空间大小 类名称[C=>char[];[S=>short[];[I=>int[];[B=>byte[] # 查看堆信息 JDK9+不再支持 jmap -heap 进程ID # 导出dump文件 jmap -dump:format=b,file=eureka.hprof # JDK9+ jhsdb jmap --binaryheap --dumpfile=heap.hprof --pid 546543

    dump文件导入到jvisualvm进行分析

    image.png

  • jstack

    • jstack 获取线程快照,可以寻找死锁,也可以利用jvisualvm自动检测死锁

      jstack > fileDir/fileName

      image.png

      image.png

    • jstack寻找cpu最高的线程堆栈信息

      bash
      复制代码
      # 查看cpu进程使用情况 top # 查看使用率最高的进程 top -p <pid> # 展开进程里详细的线程占用信息 H # 找到cpu占用率最高的线程,将线程id转化为小写的16进制 # 执行以下命令 pid是十进制进程号,N是显示行数,jpid是十六进制的线程号 jstack <pid> | grep -A N <jpid>

      image.png

      image.png

  • jinfo

    • 查看正在运行的java程序扩展参数

    image.png

    • 查看系统参数

    image.png

  • jstat jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数]

    • 查看GC信息 jstat -gc

      S0C:第一个幸存区的大小,单位KB; S1C:第二个幸存区的大小

      S0U:第一个幸存区的使用大小; S1U:第二个幸存区的使用大小

      EC:伊甸园区的大小; EU:伊甸园区的使用大小

      OC:老年代大小; OU:老年代使用大小

      MC:方法区大小(元空间); MU:方法区使用大小

      CCSC:压缩类空间大小; CCSU:压缩类空间使用大小

      YGC:年轻代垃圾回收次数; YGCT:年轻代垃圾回收消耗时间,单位s

      FGC:老年代垃圾回收次数; FGCT:老年代垃圾回收消耗时间,单位s

      GCT:垃圾回收消耗总时间,单位s

    image.png

    • 堆内存统计 jstat -gccapacity

      NGCMN:新生代最小容量

      NGCMX:新生代最大容量

      NGC:当前新生代容量

    image.png

    • 新生代垃圾回收统计 jstat -gcnew

    image.png

  • 诊断工具arthas

    • 下载 wget https://alibaba.github.io/arthas/arthas-boot.jar
    • 启动并分析在运行的进程

    image.png

    dashboard查看进程运行情况

    image.png

    thread查看线程情况(thread <线程id> 查看线程堆栈 thread -b 查看是否有死锁)

    image.png

    jad +全类名 实现反编译

    image.png

    ognl 获取变量(更离谱的,可以改变线上变量值)

    image.png

  • GC日志分析

    java -jar -Xloggc:./gc-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M microservice-eureka-server.jar

    拿到gc文件后可以上传至gceasy(https://gceasy.io) 进行分析,会输出一个可视化界面查看堆内存及分代使用情况,以及会给出优化建议。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP