java自带命令行工具(jcmd,jstack)

1.jcmd

1.1作用

发送诊断命令请求到正在运行的Java虚拟机(JVM)。

它必须和JVM运行在同一台机器上,并且与启动JVM用户具有相同的组权限。
1.2语法

jcmd [-l|-h|-help]
jcmd pid|main-class PerfCounter.print
jcmd pid|main-class -f filename
jcmd pid|main-class command[ arguments]

Perfcounter.print:打印Java进程的性能计数器

-f filename:从中读取诊断命令,每行命令必须在一行内写完

command [arguments]:诊断指令

1.3命令列表

C:\Users\Administrator>jcmd 7048 help
7048:
The following commands are available:
VM.native_memory
VM.commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
Thread.print
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
#打印JDK及版本
C:\Users\Administrator>jcmd 7048 VM.version
7048:
Java HotSpot(TM) 64-Bit Server VM version 24.75-b04
JDK 7.0_75
#打印虚拟机系统属性
可以有几百行的信息显示。

C:\Users\Administrator>jcmd 7048  VM.system_properties
7048:
#Sat Apr 15 21:24:31 CST 2017
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D\:\\Java\\jdk1.7.0_75\\jre\\bin
java.vm.version=24.75-b04
shared.loader=
java.vm.vendor=Oracle Corporation
java.vendor.url=http\://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
tomcat.util.buf.StringCache.byte.enabled=true
file.encoding.pkg=sun.io
...
#打印用于虚拟机的所有标志
即使没有设置,一些默认值将被打印出来
C:\Users\Administrator>jcmd 7048 VM.flags
7048:
-XX:InitialHeapSize=132669696 -XX:MaxHeapSize=2124414976 -XX:+UseCompressedOops 
-XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC

7048:
[Global flags]
    uintx AdaptivePermSizeWeight                    = 20              {product}           
    uintx AdaptiveSizeDecrementScaleFactor          = 4               {product}           
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10              {product}           
    uintx AdaptiveSizePausePolicy                   = 0               {product}           
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50              {product}           
    uintx AdaptiveSizePolicyInitializingSteps       = 20              {product}           
    uintx AdaptiveSizePolicyOutputInterval          = 0               {product}           
    uintx AdaptiveSizePolicyWeight                  = 10              {product}           
    uintx AdaptiveSizeThroughPutPolicy              = 0               {product}           
    uintx AdaptiveTimeWeight                        = 25              {product}           
     bool AdjustConcurrency                         = false           {product}           
     bool AggressiveOpts                            = false           {product}           
     intx AliasLevel                                = 3               {C2 product}        
     bool AlignVector                               = true            {C2 product} 
     uintx InitialHeapSize                          := 132669696       {product} 
     ...
     #冒号:表示非默认值 
     #打印(秒)正常运行时间
     C:\Users\Administrator>jcmd 7048 VM.uptime
        7048:
        2213.664 s  
 #类直方图       
 C:\Users\Administrator>jcmd 7048 GC.class_histogram   > 12333.txt       
7048:
 num     #instances         #bytes  class name
----------------------------------------------
   1:         11678        8137440  [B
   2:         30213        4300992  [C
   3:         28188        3966976  <constMethodKlass>
   4:         28188        3619568  <methodKlass>
   5:          2339        2866712  <constantPoolKlass>
   6:          2038        1698944  <constantPoolCacheKlass>
   7:          2339        1659448  <instanceKlassKlass>
   8:         28718         689232  java.lang.String
   9:         16608         531456  java.util.HashMap$Entry
  10:           736         416896  <methodDataKlass>
  11:          6144         369080  [Ljava.lang.Object;
  12:          2620         254960  java.lang.Class
  13:           877         234768  [Ljava.util.HashMap$Entry;
  14:          3569         229624  [S
  15:          3773         214248  [[I
....
#创建堆转储(HPROF)
 C:\Users\Administrator>jcmd 7048 GC.heap_dump filename=Myheapdump
7048:
Heap dump file created    
与jmap -dump:file=<file> <pid>功能一样
#创建一个堆直方图 
jcmd <process id/main class> GC.class_histogram filename=Myheaphistogram
使用jmap -histo <pid> 
打印线程的栈信息
C:\Users\Administrator>jcmd  7048 Thread.print
7048:
2017-04-15 21:43:28
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.75-b04 mixed mode):

"ajp-bio-8009-AsyncTimeout" daemon prio=6 tid=0x000000000d5bb000 nid=0x78c waiting on condition [0x000000000f16f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:152)
        at java.lang.Thread.run(Thread.java:745)
        .......
{product}
{C2 product}
{pd product}
{C1 product}
{manageable}:运行时动态更改
{C2 pd product}
{ARCH product}
{C1 pd product}
{lp64_product}
{product rw}

(2)jstack

2.1 作用

打印Java进程,核心文件或者远程调试服务器的Java线程堆栈跟踪.

  • 死锁监测和HANG
  • 使用jsadebugd 守护进程查询远程机器上的core文件及进程
  • -l,可以打印java.util.concurrent.locks同步信息和堆上的同步器,没有该选项,仅仅是监视器的信息。
  • jstack pid 与 ctrl+break
  • 也可以Thread.getAllStackTraces

2.2 语法

jstack [ options ] pid
jstack [ options ] executable core
jstack [ options ] [ [email protected] ] remote-hostname-or-IP

每一个栈帧,打印信息包括类名,方法名,字节码索引(BCI),和行数。-m开关,同时打印本地和java栈帧信息。

当指定的进程在一个64位Java虚拟机上运行,则可能需要指定-J-d64选项,例如:jstack -J-d64 -m pid。

2.3 参数Options

-F:强制dump

-l:打印额外信息

-m:打印混合堆栈信息(c++,java)

http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html

http://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr016.html

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html

https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jcmd.html

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html

时间: 2024-12-16 18:55:19

java自带命令行工具(jcmd,jstack)的相关文章

java自带命令行工具(jmap,jhat,jinfo)

(1)JMAP 1.作用 打印进程,core文件,和远程进程的共享对象存储map或堆存储器的详细信息. 2.使用 jmap [ options ] pid jmap [ options ] executable core jmap [ options ] [ pid ] [email protected] ] remote-hostname-or-IP 如果指定的进程是在64位Java虚拟机(JVM)上运行,那么你可能需要指定-J-d64选项,例如:jmap -J-d64 -heap pid.

jdk自带常用命令行工具使用

下面是笔者整理的jdk自带的常用命令行工具的使用方法,全部原创,转载请注明出处,并贴上链接,谢谢! jps命令使用 jstat命令使用 jinfo命令使用 jmap命令使用 jhat命令使用 jstack命令使用 jcmd命令使用

Wireshark命令行工具tshark

Wireshark命令行工具tshark 1.目的 写这篇博客的目的主要是为了方便查阅,使用wireshark可以分析数据包,可以通过编辑过滤表达式来达到对数据的分析:但我的需求是,怎么样把Data部分导出来,因为后续的工作主要针对数据包的Data部分,主要是对本地存储的.pcap文件进行解析.这时候就会使用到tshark命令行工具,可以通过命令提取自己想要的数据,可以重定向到文件,也可以结合上层语言比如Java,来调用命令行,实现对数据的处理! 下面我会从 相关实例.选项介绍.部分实例运行结果

JDK的命令行工具

jps:虚拟机进程状况工具 jps(JVM Process Status Tool)可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID).虽然功能比较单一,但它是使用频率最高的JDK命令行工具,因为其他的JDK工具大多需要输入它查询到的LVMID来确定要监控的是哪一个虚拟机进程.对于本地虚拟机进程来说,LVMID与操作系统的进程ID(

APache PDFbox API使用(2)----命令行工具的使用

在写具体代码之前,咱们先了解一下Apache PDFbox API框架给我们提供的命令行工具.通过这个命令行工具,我们可以了解大部分 Apache PDFbox给我们提供的强大功能. 在我们运行命令之前,我们首先需要去下载这个命令行工具所依赖的jar文件,大家可以去下面的任何一个站点去下载. http://apache.fayea.com/apache-mirror/pdfbox/1.8.5/pdfbox-app-1.8.5.jar http://mirrors.cnnic.cn/apache/

Apache Commons CLI 开发命令行工具示例

概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提供了详尽的使用手册,有些还提供示例说明如何二次开发.然而关于如何开发一个易用.强壮的命令行工具的文章却很少.本文将结合 Apache Commons CLI,通过一个完整的例子展示如何准备.开发.测试一个命令行工具.希望本文对有相关需求的读者能有所帮助.      Apache Commons CL

JDK的命令行工具系列 (一) jps、jstat

概述 在我们进行故障定位和性能分析时, 可以使用Java Dump(也叫Dump文件)来帮助排查问题, 它记录了JVM运行期间的内存占用和线程执行等情况.其中Heap Dump文件是二进制格式, 它保存了某一时刻的系统信息.虚拟机属性.完整的线程Dump.所有类和对象的状态等, 是指定时刻的java堆栈的快照; Thread Dump文件是纯文本格式, 它保存了java应用程序各线程在某一时刻的运行位置. 在%JAVA_HOME%\lib目录下, 有一些诸如jps.exe.jstack.exe.

JDK的命令行工具系列 (二) javap、jinfo、jmap

javap: 反编译工具, 可用来查看java编译器生成的字节码 参数摘要: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出public和protected类和成员 -package 只输出包,public和protected类和成员,这是默认的 -p -private 输出所有类和成员 -s 输出内部类型签名 -c 输出分解后的代码,例如,类中每一个方法内,包含java字节码的指令 -verbose 输出栈大小,方法参数的个数

jdk命令行工具的基本使用

jps:可以列出正在运行的虚拟机进程 主要选项 样例: jstat:用于监视虚拟机各种运行状态信息的命令行工具.它可以显示本地或者远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据 命令格式:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]命令选项 使用样例:每250ms查询一次进程pid 9968的垃圾收集情况,一共查询10次 显示百分比 jinfo:作用是