jstack、jmap、jstat

2024-04-25 18:38
文章标签 jmap jstack jstat

本文主要是介绍jstack、jmap、jstat,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

jstack、jmap、jstat

  • 1. Jstack
  • 2. Jmap
  • 3. Jstat
  • 参考

1. Jstack

jstack能得到运行java程序的java stack和native stack的信息。可以轻松得知当前线程的运行情况。如下图所示。在这里插入图片描述
注:这个和thread dump是同样的结果。但是thread dump是用kill -3 pid命令,还是服务器上面少用kill为妙。

1.1 命名行格式

jstack [ option ] pid 
jstack [ option ] executable core 
jstack [ option ] [server-id@]remote-hostname-or-IP 

最常用的还是jstack pid

1.2 在thread dump中,要留意下面几种状态

  • 死锁,Deadlock(重点关注)
  • 等待资源,Waiting on condition(重点关注)
  • 等待获取监视器,Waiting on monitor entry(重点关注)
  • 阻塞,Blocked(重点关注)
  • 执行中,Runnable
  • 暂停,Suspended
  • 对象等待中,Object.wait() 或 TIMED_WAITING
  • 停止,Parked

2. Jmap

得到运行java程序的内存分配的详细情况。例如实例个数,大小等。

2.1 命令行格式

jmap [ option ] pid 
jmap [ option ] executable core 
jmap [ option ] [server-id@]remote-hostname-or-IP -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. 

2.2 示例
jmap -histo pid(查看实例)

$ jmap -histo 55126num     #instances         #bytes  class name
----------------------------------------------1:          2696       18147408  [B2:         72107        7164800  [C3:          1617        2149968  [I4:         71071        1705704  java.lang.String5:         30460        1329160  [Ljava.lang.Object;6:         24424         781568  java.util.HashMap$Node7:         12488         599424  gnu.trove.THashMap8:          3781         420352  java.lang.Class9:         12456         298944  org.jetbrains.jps.model.ex.JpsElementContainerImpl10:          8854         283328  java.util.concurrent.ConcurrentHashMap$Node11:           740         183472  [Ljava.util.HashMap$Node;12:          4954         158528  org.jetbrains.jps.model.library.impl.JpsLibraryReferenceImpl13:          2866         137568  java.util.HashMap14:          7992         127872  java.lang.Object15:          3967         126944  java.io.File16:          4048          97152  org.jetbrains.jps.model.java.impl.JpsJavaDependencyExtensionImpl17:          3716          89184  org.jetbrains.jps.model.module.impl.JpsLibraryDependencyImpl18:          5426          86816  org.jetbrains.jps.model.impl.JpsProjectElementReference19:           959          84392  java.lang.reflect.Method20:          3359          80616  com.intellij.util.SmartList21:            56          72288  [Ljava.util.concurrent.ConcurrentHashMap$Node;22:          1772          70880  java.lang.ref.Finalizer23:          1967          62944  org.jetbrains.jps.model.impl.JpsElementCollectionImpl24:          2549          61176  java.util.ArrayList25:          1250          50000  org.jetbrains.jps.incremental.artifacts.instructions.FileBasedArtifactRootDescriptor26:           631          45432  java.lang.reflect.Field27:          1404          44928  org.jetbrains.jps.model.library.impl.JpsLibraryRootImpl

jmap -dump:format=b,file=heap.bin pid(导出内存,据说对性能有影响,小心使用)
format=b是通过二进制的意思

3. Jstat

这是一个比较实用的一个命令,可以观察到classloader,compiler,gc相关信息。可以时时监控资源和性能。

3.1 命令格式

-class:统计class loader行为信息 
-compile:统计编译行为信息 
-gc:统计jdk gc时heap信息 
-gccapacity:统计不同的generations(不知道怎么翻译好,包括新生区,老年区,permanent区)相应的heap容量情况 
-gccause:统计gc的情况,(同-gcutil)和引起gc的事件 
-gcnew:统计gc时,新生代的情况 
-gcnewcapacity:统计gc时,新生代heap容量 
-gcold:统计gc时,老年区的情况 
-gcoldcapacity:统计gc时,老年区heap容量 
-gcpermcapacity:统计gc时,permanent区heap容量 
-gcutil:统计gc时,heap情况 

3.2 输出参数内容

S0  — Heap上的 Survivor space 0 区已使用空间的百分比 
S0C:S0当前容量的大小 
S0U:S0已经使用的大小 
S1  — Heap上的 Survivor space 1 区已使用空间的百分比 
S1C:S1当前容量的大小 
S1U:S1已经使用的大小 
E   — Heap上的 Eden space 区已使用空间的百分比 
EC:Eden space当前容量的大小 
EU:Eden space已经使用的大小 
O   — Heap上的 Old space 区已使用空间的百分比 
OC:Old space当前容量的大小 
OU:Old space已经使用的大小 
P   — Perm space 区已使用空间的百分比 
OC:Perm space当前容量的大小 
OU:Perm space已经使用的大小 
YGC — 从应用程序启动到采样时发生 Young GC 的次数 
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒) 
FGC — 从应用程序启动到采样时发生 Full GC 的次数 
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒) 
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC 

3.3 示例
jstat -gc pid

$ jstat -gc 55126S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
10752.0 10752.0  0.0    0.0   65536.0  18435.3   122880.0   15341.9   21248.0 20582.4 2560.0 2299.6      3    0.038   1      0.061    0.099

jstat -gcutil pid

$ jstat -gcutil 55126S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   0.00   0.00  28.13  12.49  96.87  89.83      3    0.038     1    0.061    0.099

jstat -gc pid 100 5

$ jstat -gcutil 55126 100 5S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   0.00   0.00  28.13  12.49  96.87  89.83      3    0.038     1    0.061    0.0990.00   0.00  28.13  12.49  96.87  89.83      3    0.038     1    0.061    0.0990.00   0.00  28.13  12.49  96.87  89.83      3    0.038     1    0.061    0.0990.00   0.00  28.13  12.49  96.87  89.83      3    0.038     1    0.061    0.0990.00   0.00  28.13  12.49  96.87  89.83      3    0.038     1    0.061    0.099

jstat -gccapacity pid

$ jstat -gccapacity 55126NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 87040.0 238592.0  87040.0 10752.0 10752.0  65536.0   175104.0   478208.0   122880.0   122880.0      0.0 1069056.0  21248.0      0.0 1048576.0   2560.0      3     1

参考

三个实例演示 Java Thread Dump 日志分析
jstack(查看线程)、jmap(查看内存)和jstat(性能分析)

这篇关于jstack、jmap、jstat的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935475

相关文章

jstat用法

jstat的用法 用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序。 Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指

基于jstat 进行JVM监控

文章目录 引言I jstat 统计信息工具JVM 堆内存布局命令格式元数据空间统计堆内存统计JVM编译方法统计编译统计类加载统计 II JVM调优基本概念: 应用程序的响应时间(RT)和吞吐量(QPS)JVM调优原理调优思路调优方法JVM调优技巧建议 III 基于jstat 分析垃圾回收情况,进行JVM调优优化思路估算年轻代对象增长速率Young GC的触发频率和每次耗时每次Young GC

jstack定位线程堆栈信息,精确找到异常代码

以下代码借鉴了两篇博文 https://blog.csdn.net/mr__fang/article/details/68496248 http://www.javatang.com/archives/2017/10/19/33151873.html   找到CPU利用率持续比较高的进程, 命令:top   找到CPU使用率较高的线程ID(TID): 命令:ps p 16480

使用jmap和MAT进行堆内存溢出分析

jmap:Java内存映像工具 jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。另外,还有几种方式获取dump文件:使用JVM参数选项-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生成dump文件,通过-XX:HeapDumpPath=path 设置dump文件路径(有时

JDK常用命令jps、jinfo、jstat的使用介绍

概述 JDK的bin目录下提供了很多命令工具,比如java.exe,javap.exe,javac.exe。。。。。。这些命令由jdk/lib/tools.jar类库中提供的,是对tools.jar中的类的封装。我们主要介绍一下JVM中处理运行日志、异常堆栈、GC日志、线程快照(threaddump / javacore文件)、堆转储快照(heapdump/hprof文件)等信息的相关常用命令(

java项目没有挂但是所有线程停止运行,jstack和jmap等分析工具也无法使用

java项目使用jacob调用本地接口跟设备通讯 项目没有挂但是所有线程停止运行,jconsole、jstack和jmap等分析工具也无法使用,只能通过jstack -F 指令强制打印线程信息,下面是打印的现成信息,目前没找到问题,后面找到后进行更新 Microsoft Windows [版本 10.0.14393](c) 2016 Microsoft Corporation。保留所有权利。C

jvm工具-jps、jstat、jmap、jstack

一、jps jps -v 【输出进程启动参数】 [root@VM-8-2-centos ~]# jps -v12401 Jps -Dapplication.home=/usr/local/jdk1.8.0_241 -Xms8m16964 jar 其他参考 Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客  二、jstat js

JVM 性能分析——jdk 自带命令分析工具(jps/jstat/jinfo/jmap/jhat/jstack)

文章目录 jps(Java Process Status):查看正在运行的Java进程`jstat(JVM Statistics Monitoring Tool):查看 JVM 的统计信息`jinfo(Configuration Info for Java):实时查看和修改JVM配置参数`jmap(JVM Memory Map):导出内存映像文件`和查看内存使用情况jhat(JVM Heap

深入讲解jstack命令

jstack是java虚拟机自带的一种堆栈跟踪工具。 功能 jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么

jmap 和 jstack 的线上使用及操作过程示例

jmap 和 jstack 的线上使用及操作过程示例 一、jmap 1. 工具简介 jmap是JDK提供的一个命令行工具,主要用于生成Java堆的转储快照(dump文件)以及查看Java进程中的内存使用情况。 2. 命令语法 jmap [option] <pid> 其中,option为命令选项,pid为Java虚拟机的进程ID。 3. 常用选项及功能 -heap:打印Java堆的