zoukankan      html  css  js  c++  java
  • JDK自带JVM性能调优监控工具jps、jstack、jmap、jhat、jstat

    原文地址:https://www.jianshu.com/p/db954cb968fb

    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat位于JDK的bin目录,这些工具短小精悍,常用于线上系统的分析监测。

    用来解决如下问题

    1. OutOfMemoryError,分析内存不足的原因
    2. 内存泄漏
    3. 线程死锁
    4. 锁竞争
    5. java线程消耗CPU过高

    jps(Java Virtual Machine Process Status Tool)

    JVM 进程状态工具,主要用来输出JVM中运行的进程状态信息

    语法格式:

     
     

    演示如下:


     
     

     
     

    打印多项


     
     

    jstack(java stack trace)

    用来查看某个Java进程内的线程堆栈信息,实时监测系统运行时线程栈信息,而不用暂停程序排查,常用于线上系统的问题排查,一般都是间隔一段时间使用jstack命令打印出当前系统实时快照,然后比对线程在在锁上的执行状态来判断系统是否存在死锁、过度竞争等问题。

    语法格式:

     
     

    演示:
    步骤1:top 命令查看按CPU使用率降序进程ID

     
     

    其实整个系统比较闲,拿来做实验,最占CPU的是进程ID为12622的进程。

    步骤2 :top -Hp pid 命令查看进程中各个线程占用CPU的情况。

     
     

    可见最占CPU的是ID为13037的线程
    与top -Hp pid等价的命令:ps -Lfp pid或者ps -mp pid -o THREAD, tid, time。

    步骤3:printf "%x " 13037 获取16进制nid

     
     

    将十进制13037 转换为16进制为32ed

    步骤4:使用jstack命令分析线程栈信息

    1. jstack -l pid 查看某一JVM进程的所有线程的信息
     
     

    利用linux输出重定向,将线程信息输入到pid12622.dump文件中
    然后使用more命令查看此文件
     
     

    部分信息,以后对这个dump文件信息进行解析
     
     

    http://blog.csdn.net/rachel_luo/article/details/8920596
    1. jstack -l pid | grep nid查看某一JVM进程的指定线程的信息

    利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推,grep是支持正则表达式的实用文本搜索工具。


     
     

    jstat(Java Virtual Machine Statistics Monitoring Tool)

    JVM统计监测工具, 常用来实时监测系统堆的使用情况,以及GC信息、编译信息、类加载信息,常用来判断系统JVM参数是否设置合理,作为系统参数调优的信息统计工具

    语法:

     
     

    根据jstat统计的维度不同,可以使用如下表中的选项进行不同维度的统计,不同的操作系统支持的选项可能会不一样,可以通过-options选项,查看不同操作系统所支持选项。

    jstat -option获取系统支持的选项

     
     

    选项说明


     
     

     
     

    演示

     
     

     
     

    列名信息参考 http://blog.csdn.net/fenglibing/article/details/6411951

    JVM堆内存布局(JDK1.7及之前,JDK1.8已经移除永久代i,而使用元数据,元数据属于堆外内存,但是也间接被GC管理)


     
     

    说明:

     
     

    jmap(Memory Map)和jhat(Java Heap Analysis Tool)

    jmap用来查看堆内存(JVM中各个代的内存情况,对象占用情况)使用状况,还可以导出整个JVM的内存信息,一般结合jhat使用。

    常用命令格式(注意64位JDK,需要加每条命令要加 -J-d64):

    jmap -heap [pid] 查看整个JVM中内存使用情况(还含有JDK版本,GC策略相关等)。

     
     

     
     

    需要注意当使用CMS GC时 jmap -heap命令可能导致Java进程被挂起

    jmap -histo [pid]

    查看JVM堆中存活对象的详细使用情况,常用于分析OutOfMemory

     
     

     
     

    jmap -dump:format=b, file=fileName [pid]

    将整个JVM内存信息以二进制的形式导出到指定文件,这个二进制文件可以通过JHAT来分析


     
     
    分析内存快照

    jhat [file]

    分析内存占用,对象引用关系等, J-Xmx1024意思是将最大堆参数-Xmx1024传递给启动jhat分析的JVM进程的。


     
     

     
     

    通过浏览器访问 http:ip:7000地址,进行分析


     
     

    首页按包进行分组,有全限定类名和此类加载到永久代的堆地址

    点击链接查看指定类的的加载信息,继承信息,数据域、引用信息,以及创建的对象实例信息

     
     

    本文参考如下链接,只是对这些工具的总结笔记

    参考以及拓展链接
    R大(莫枢)借HSDB来探索HotSpot VM的运行时数据
    Thread dump 分析综述
    http://blog.csdn.net/fenglibing/article/details/6411940
    http://www.open-open.com/lib/view/open1390916852007.html
    http://blog.csdn.net/qq_16811963/article/details/52997178



    作者:zhanglbjames
    链接:https://www.jianshu.com/p/db954cb968fb
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    Unity 类似FingerGestures 的相机跟随功能
    protected 学习
    Unity 学习Json篇
    Unity 动态加载 Prefab
    iTween基础之iTweenPath(自定义路径移动)
    Unity连Photon服务器入门详解
    如何用unity3d实现发送带附件的邮件
    【转】【风宇冲】Unity3D教程宝典之Web服务器篇
    unity Editor编辑器插件脚本学习
    收集整理Android开发所需的Android SDK、开发中用到的工具
  • 原文地址:https://www.cnblogs.com/boonya/p/10337619.html
Copyright © 2011-2022 走看看