• 《深入理解JVM》笔记 第4、5章 调优工具与案例


    定位问题,知识、经验是关键,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等

    一、工具

    1. JDK命令行工具(大多是jdk/lib/tols.jar的封装)

    【1】jps:显示系统内所有HotSpot虚拟机进程

    在一台hadoop服务器(jdk1.8)上执行试试看,可以看到3个进程在运行

     

    【2】jstat:监视虚拟机各种运行状态信息

    选一个刚才jps显示的进程号,比如26437

    执行jstat -gc 26437 250,表示250ms查询一次进程26437 垃圾收集情况。

     

    执行jstat -gcuti 26437,显示已使用空间占总空间百分比

    S0、S1 表示Survivor0、Survivor1

    E表示Eden,O表示Old,M表示Metaspace,CCS 压缩类空间 (Metaspace的一部分),YGC 年轻代GC总次数 ,YGCT 年轻代GC总时间

    jstat工具主要选项:

    -class (类加载器)
    -compiler (JIT)
    -gc (GC堆状态)
    -gccapacity (各区大小)
    -gccause (最近一次GC统计和原因)
    -gcnew (新区统计)
    -gcnewcapacity (新区大小)
    -gcold (老区统计)
    -gcoldcapacity (老区大小)
    -gcpermcapacity (永久区大小)
    -gcutil (GC统计汇总)
    -printcompilation (HotSpot编译统计)

    【3】jinfo:显示虚拟机配置信息

    jinfo -flag xxx 26437 

     此处验证了在jdk1.8中,默认所有对象优先在Eden分配,默认年龄为15的对象进入老年代。

    【4】jmap:生成虚拟机的内存转储快照(heapdump)

    除了jmap获取dump文件,还有几种方式:

    • 通过-XX:+HeapDumpOnOutOfMemoryError参数,让虚拟机在OOM后自动生成dump文件
    • 通过-XX:+HeapDumpOnCtrlBreak参数,使用【Ctrl】+【Break】键让虚拟机生成dump文件
    • Linux下通过Kill -3命令发送进程退出信号“吓唬”一下虚拟机,也能拿到dump文件

    jmap工具主要选项:

    -dump(生成dump文件)

    -finalizerinfo(F-Queue中等待的对象)

    -heap(java堆详细信息)

    -histo(堆中对象统计信息)

    -F(强制生成快照)

    【5】jhat:用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果

    【6】jstack:用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)

    主要目的是定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部资源时间长。

    2. JDK可视化工具

    1. JConsole(基于JMX) Java监视与管理控制平台

    2. VisualVM 多和一故障处理工具

    二、调优案例

    以后再写。

  • 相关阅读:
    Linux下Oracle client客户端安装
    深度学习的batch_size
    Ubuntu下CUDA8.0卸载
    Numpy 定义矩阵的方法
    python 按照自然数排序遍历文件 python os.listdir sort by natural sorting
    linux 将终端进行换行
    从LeNet到SENet——卷积神经网络回顾
    神经网络权值初始化方法-Xavier
    FaceAlignment blog
    tensorflow模型量化压缩
  • 原文地址:https://www.cnblogs.com/jdbc2nju/p/16043327.html
Copyright © 2020-2023  润新知