调优工具

  1. java自带的监控工具 jvisualvm
  2. 阿里开源的 arthas 工具

    1. curl -O https://alibaba.github.io/arthas/arthas-boot.jar
    2. java -jar arthas-boot.jar

    arthas 操作调优

  3. 等待启动之后 可以输入 dashboard进行 线程状态的一个检测

  4. 查看是否有线程占用cpu很高或者其他情况 可以在dashboard面板中输入 Thread _ 线程id查看问题
  5. 也可以使用arthas直接反编译线上环境的类进行查看代码情况

    调优的目的

  6. 减少GC

  7. 在堆内存老年代内存装满之后 继续新建对象暂时不会发送堆内存溢出,此时会发送full GC进行整体堆内存进行垃圾升级,如果此时还没能整理空闲的区域 则会抛出OOM ps(普通的GC叫做 minorGC)

    Why 减少GC

  8. 因为在GC的时候会停止用户线程 (STOP THE WORK STW)

  9. 为什么会有stw 是因为如果不停止用户线程 当fullGC的时候 用户线程已经结束 GC还没能结束 之前判定为非垃圾的对象 会在用户执行完成之后变成垃圾 然而GC 没能检测到,同时也不可能再次循环检测 否则GC一直停不下来

    两种GC的回收区域

  10. mintorGC 一般回收的是年轻代

  11. full GC 一般是老年代填充满了然后开始 整体GC