JDK安装完后,其内置了许多的监控工具,常用的有jvisualvm,jconsole,jps,jmap,jinfo,jstat,jstack,这些命令都在jdk安装的bin目录下:

1、jvisualvm

一款GUI监控工具,可以对正在运行的java应用程序进行全面的监控分析,可以对cpu,heap size,线程等监控

2、jconsole

基础功能和jvisualvm差不多,可以对对cpu,heap size,线程等监控

3、jps

查看JVM里面所有的进程的具体状态,包括进程id,进程启动的路径等

  1. # jps
  2. Bootstrap
  3. Jps
  4. Application

4、jmap

打印出jvm堆内的对象情况,可以观察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用情况。

基本参数:基本参数可通过jmap -help查看,以下各个指令一样。

  • -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

  • -finalizerinfo 打印正等候回收的对象的信息.

  • -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

  • -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.

  • -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

  • -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

  • -h | -help 打印辅助信息

  • -J 传递参数给jmap启动的jvm.

  • pid 需要被打印配相信息的java进程id,可以用jps查问.

  1. # jmap -heap
  2. Attaching to process ID , please wait...
  3. Debugger attached successfully.
  4. Server compiler detected.
  5. JVM version is 25.181-b13
  6.  
  7. using thread-local object allocation.
  8. Parallel GC with thread(s)
  9.  
  10. Heap Configuration:
  11. MinHeapFreeRatio =
  12. MaxHeapFreeRatio =
  13. MaxHeapSize = (.0MB)
  14. NewSize = (.5MB)
  15. MaxNewSize = (.5MB)
  16. OldSize = (.5MB)
  17. NewRatio =
  18. SurvivorRatio =
  19. MetaspaceSize = (.796875MB)
  20. CompressedClassSpaceSize = (.0MB)
  21. MaxMetaspaceSize = MB
  22. G1HeapRegionSize = (.0MB)
  23.  
  24. Heap Usage:
  25. PS Young Generation
  26. Eden Space:
  27. capacity = (.5MB)
  28. used = (.47528839111328MB)
  29. free = (.02471160888672MB)
  30. 28.009019699771848% used
  31. From Space:
  32. capacity = (.5MB)
  33. used = (.15625MB)
  34. free = (.34375MB)
  35. 31.25% used
  36. To Space:
  37. capacity = (.5MB)
  38. used = (.0MB)
  39. free = (.5MB)
  40. 0.0% used
  41. PS Old Generation
  42. capacity = (.5MB)
  43. used = (.9308624267578MB)
  44. free = (.5691375732422MB)
  45. 55.32382501515602% used
  46.  
  47. interned Strings occupying bytes.

5、jinfo

查看JVM的配置信息,输出信息略多,就不贴出来了,可自行测试查看

6、jstat

可以监控JVM的类的加载及卸载情况,查看新生代、老生代及持久代的容量及使用情况,查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间,查看新生代中Eden区及Survior区中容量及分配情况等。,是一个比较实用的命令工具。

语法:jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]

具体参数如下:

  • class:统计class loader行为信息
  • compile:统计编译行为信息
  • gc:统计jdk gc时heap信息
  • gccapacity:统计查看新生代、老生代及持久代的存储容量情况
  • gccause:统计gc的情况,(同-gcutil)和引起gc的事件
  • gcnew:统计gc时,新生代的情况
  • gcnewcapacity:统计gc时,新生代heap容量
  • gcold:统计gc时,老年区的情况
  • gcoldcapacity:统计gc时,老年区heap容量
  • gcpermcapacity:统计gc时,permanent区heap容量
  • gcutil:统计gc时,heap情况
  • printcompilation:HotSpot编译方法的统计。

vmid  - VM的进程号,即当前运行的java进程号。

interval–间隔时间,单位可以是秒或者毫秒,通过指定s或ms确定,默认单位为毫秒。

count-打印次数,如果缺省则打印无数次。

  1. #每隔1秒监控一次,共监控3次
  2. # jstat -class
  3. Loaded Bytes Unloaded Bytes Time
  4. 45074.3 1388.7 17.01
  5. 45074.3 1388.7 17.01
  6. 45074.3 1388.7 17.01

说明:

  • Loaded 加载了的类的数量
  • Bytes 加载了的类的大小,单为Kb
  • Unloaded 卸载了的类的数量
  • Bytes 卸载了的类的大小,单为Kb
  • Time 花在类的加载及卸载的时间
  1. # jstat -gc
  2. S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
  3. 512.0 512.0 0.0 128.0 173568.0 48608.9 349696.0 214569.2 135808.0 129898.4 17024.0 16017.7 26476.281 135.352 26611.633
  4. 512.0 512.0 0.0 128.0 173568.0 48621.6 349696.0 214569.2 135808.0 129898.4 17024.0 16017.7 26476.281 135.352 26611.633
  5. 512.0 512.0 0.0 128.0 173568.0 48634.8 349696.0 214569.2 135808.0 129898.4 17024.0 16017.7 26476.281 135.352 26611.633

说明

  • S0C 新生代中Survivor space中S0当前容量的大小(KB)
  • S1C 新生代中Survivor space中S1当前容量的大小(KB)
  • S0U 新生代中Survivor space中S0容量使用的大小(KB)
  • S1U 新生代中Survivor space中S1容量使用的大小(KB)
  • EC Eden space当前容量的大小(KB)
  • EU Eden space容量使用的大小(KB)
  • OC Old space当前容量的大小(KB)
  • OU Old space使用容量的大小(KB)
  • PC Permanent space当前容量的大小(KB)
  • PU Permanent space使用容量的大小(KB)
  • YGC 从应用程序启动到采样时发生 Young GC 的次数
  • YGCT 从应用程序启动到采样时 Young GC 所用的时间(秒)
  • FGC 从应用程序启动到采样时发生 Full GC 的次数
  • FGCT 从应用程序启动到采样时 Full GC 所用的时间(秒)
  • GCT T从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC
  1. # jstat -gccapacity
  2. NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
  3. 174592.0 174592.0 174592.0 512.0 512.0 173568.0 349696.0 349696.0 349696.0 349696.0 0.0 1167360.0 135808.0 0.0 1048576.0 17024.0
  4. 174592.0 174592.0 174592.0 512.0 512.0 173568.0 349696.0 349696.0 349696.0 349696.0 0.0 1167360.0 135808.0 0.0 1048576.0 17024.0
  5. 174592.0 174592.0 174592.0 512.0 512.0 173568.0 349696.0 349696.0 349696.0 349696.0 0.0 1167360.0 135808.0 0.0 1048576.0 17024.0

说明:

  • NGCMN 新生代的最小容量大小(KB)
  • NGCMX 新生代的最大容量大小(KB)
  • NGC 当前新生代的容量大小(KB)
  • S0C 当前新生代中survivor space 0的容量大小(KB)
  • S1C 当前新生代中survivor space 1的容量大小(KB)
  • EC Eden space当前容量的大小(KB)
  • OGCMN 老生代的最小容量大小(KB)
  • OGCMX 老生代的最大容量大小(KB)
  • OGC 当前老生代的容量大小(KB)
  • OC 当前老生代的空间容量大小(KB)
  • PGCMN 持久代的最小容量大小(KB)
  • PGCMX 持久代的最大容量大小(KB)
  • PGC 当前持久代的容量大小(KB)
  • PC 当前持久代的空间容量大小(KB)
  • YGC 从应用程序启动到采样时发生 Young GC 的次数
  • FGC 从应用程序启动到采样时发生 Full GC 的次数

7、jstack

查看线程的堆栈信息,可用于分析程序崩溃生成的core文件来定位发生问题的原因

  1. # jstack -l

输出信息过多就不贴出来了

JDK 自带的性能监控工具的更多相关文章

  1. 011 - JDK自带的性能监控工具

      一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id   jstack 查看Java线程      jstack -l pid; 做thread du ...

  2. 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行

    利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

  3. 一些JDK自带的性能分析利器

    有时候碰到服务器CPU飙升或者程序卡死之类的问题,一般都不太好定位.这类bug一般都隐藏的比较深并且还可能是偶发性的,比较棘手. 对于此类问题,一般我们都有固定的分析流程.借助于JDK自带的一些分析工 ...

  4. JDK自带JVM性能调优监控工具jps、jstack、jmap、jhat、jstat

    原文地址:https://www.jianshu.com/p/db954cb968fb JVM性能调优监控工具jps.jstack.jmap.jhat.jstat位于JDK的bin目录,这些工具短小精 ...

  5. JDK自带的运行监控工具JConsole观察分析Java程序的运行

    原文地址:https://blog.csdn.net/libaolin198706231987/article/details/55057149 一.JConsole是什么 从Java 5开始 引入了 ...

  6. JVM内核-原理、诊断与优化学习笔记(七):性能监控工具

    文章目录 系统性能监控 系统性能监控- linux uptime top vmstat(虚拟内存统计) pidstat 系统性能监控 - windows 任务管理器 Perfmon Process E ...

  7. java虚拟机(十)--性能监控工具测试内存溢出和死锁基本思路

    在之前就曾经简单介绍过jdk自带的性能检测工具,但是只是很入门的内容.没有真正的用过都是白扯了,面试的时候也说不过去,更别提真正 在生产环境去解决问题,所以这里我们学习一下真正解决问题的过程,最起码面 ...

  8. 使用JDK自带的visualvm进行性能监测和调优

    使用JDK自带的visualvm进行性能监测和调优   1.关于VisualVm工具  VisualVM 提供在 Java 虚拟机 (Java Virutal Machine, JVM) 上运行的 J ...

  9. jvm性能监控(3)-jdk自带工具 jps jstack jmap

    一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id   jstack 查看Java线程      jstack -l pid; 做thread dump ...

随机推荐

  1. python爬取豆瓣首页热门栏目详细流程

    记录一下爬取豆瓣热门专栏的经过,通过这篇文章,你能学会requests,HTMLParser,json的基本使用,以及爬取网页内容的基本思路. 使用模块 1,获取豆瓣首页代码:首先我们需要访问豆瓣页面 ...

  2. Leetcode之回溯法专题-37. 解数独(Sudoku Solver)

    Leetcode之回溯法专题-37. 解数独(Sudoku Solver) 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次.数字 1 ...

  3. javascript之操作数组方法

    掌握如何操作数组,会让你的开发变得更加高效 1.栈和队列方法(以下四个方法都改变原数组) arr.push() //接受任意类型的参数,逐个添加到数组的末尾,并返回数组的长度 改变原数组 arr.po ...

  4. HDU 4479 Shortest path 带限制最短路

    题意:给定一个图,求从1到N的递增边权的最短路. 解法:类似于bellman-ford思想,将所有的边先按照权值排一个序,然后依次将边加入进去更新,每条边只更新一次,为了保证得到的路径是边权递增的,每 ...

  5. CF991D Bishwock 第十七 贪心

    Bishwock time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  6. unicode编码原理及问题

    历史在1963年,计算机的使用尚不广泛,那时使用的是7-bit的ASCII码,范围为0-127作为字符的编码,只支持少部分的字符,但是随着计算机的普及,不同的国家地区开始自己制造自己的编码规范,这导致 ...

  7. HDU 1010 temp of the bone 解题报告 (DFS)

    转载大佬的blog,很详细,学到了很多东西 奇偶剪枝:根据题目,dog必须在第t秒到达门口.也就是需要走t-1步.设dog开始的位置为(sx,sy),目标位置为(ex,ey).如果abs(ex-x)+ ...

  8. github初学者搭建自己的网站

    如何利用github打造博客专属域名 感谢园友的无私共享-- http://www.cnblogs.com/xuehaoyue/p/6551217.html 选分支 建立好库,在设置 这里选择博客类型 ...

  9. .NET 分布式自增Id组件(解决自动分配机器Id、时间回拨问题)

    目录 简介 产生背景 使用方式 原始版 完美版 测试 结尾 简介 IdHelper是一个.NET(支持.NET45+或.NET Standard2+)生成分布式趋势自增Id组件,有两个版本:原始版为基 ...

  10. 5分钟理解 SpringBoot 响应式的核心-Reactor

    目录 一.前言 二. Mono 与 Flux 构造器 三. 流计算 1. 缓冲 2. 过滤/提取 3. 转换 4. 合并 5. 合流 6. 累积 四.异常处理 五.线程调度 小结 参考阅读 一.前言 ...