原文地址: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\n" 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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

JDK自带JVM性能调优监控工具jps、jstack、jmap、jhat、jstat的更多相关文章

  1. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof

    JVM性能调优监控工具jps.jstack.jmap.jhat.jstat.hprof

  2. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...

  3. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解(转VIII)

    JVM本身就是一个java进程,一个java程序运行在一个jvm进程中.多个java程序同时运行就会有多个jvm进程.一个jvm进程有多个线程至少有一个gc线程和一个用户线程. JDK本身提供了很多方 ...

  4. 【转】JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解

    http://www.cnblogs.com/therunningfish/p/5524238.html JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsol ...

  5. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat, hprof使用详解

    JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat等小巧的工具,本博客希望能起抛砖引玉之用,让 ...

  6. JVM性能调优监控工具——jps、jstack、jmap、jhat、jstat、hprof使用详解

    摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...

  7. JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解

    转自:  https://my.oschina.net/feichexia/blog/196575 摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConso ...

  8. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、jinfo、jconsole使用详解

    JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat等小巧的工具,本博客希望能起抛砖引玉之用,让 ...

  9. 《转》:JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    原链接:https://my.oschina.net/feichexia/blog/196575 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 ...

随机推荐

  1. java之定时器任务Timer用法

    在项目开发中,经常会遇到需要实现一些定时操作的任务,写过很多遍了,然而每次写的时候,总是会对一些细节有所遗忘,后来想想可能是没有总结的缘故,所以今天小编就打算总结一下可能会被遗忘的小点: 1. pub ...

  2. 【Java】 剑指offer(44) 连续子数组的最大和

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 数字以0123456789101112131415…的格式序列化到 ...

  3. symmfony

    安装:http://symfony.cn/docs/book/installation.html 1先检查php版本是否符合你要下载的symfony的最低版本: php -version 系统安装完成 ...

  4. 《深入探索Androdi热修复技术原理(阿里巴巴)》--读书笔记

    No1: Hybrid就是原生和Html5混合开发app No2: 插件化方法Altas或者DroidPlugin No3: 热修复技术可以把更新补丁上传到云端,此时APP就可以直接从云端下拉补丁直接 ...

  5. poj2184 Cow Exhibition【01背包】+【负数处理】+(求两个变量的和最大)

    题目链接:https://vjudge.net/contest/103424#problem/G 题目大意: 给出N头牛,每头牛都有智力值和幽默感,然后,这个题目最奇葩的地方是,它们居然可以是负数!! ...

  6. C++雾中风景番外篇3:GDB与Valgrind ,调试代码内存的工具

    写 C++的同学想必有太多和内存打交道的血泪经验了,常常被 C++的内存问题搅的焦头烂额.(写 core 的经验了)有很多同学一见到 core 就两眼一抹黑,不知所措了.笔者 入"坑&quo ...

  7. Python开发之pip使用详解

    1 pip的优点 pip如今已经成为了Python的一大特色,可以很方便得协助Python开发者进行包管理.综合来说,匹配拥有如下优点: pip提供了丰富的功能,其竞争对手easy_install只支 ...

  8. 谈谈MySQL无法连接的原因和分析方法

    [可能的原因] MySQL无法连接的原因有很多,比如: 1.数据库的请求量突增,实例连接数超过max_connections,或用户连接数超过max_user_connections, 这种情况连接时 ...

  9. CSDN 博客 美化 个性化

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha ========= ======== <a href=" http:// ...

  10. 10.30 正睿停课训练 Day12

    目录 2018.10.30 正睿停课训练 Day12 A 强军战歌(DP 树状数组 容斥) B 当那一天来临(思路) C 假如战争今天爆发(贪心) 考试代码 B C 2018.10.30 正睿停课训练 ...