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。

3.参数选项

3.1 <no option>

当不使用选项,该jmap命令打印共享对象映射

C:\Users\Administrator>jmap 9208
Attaching to process ID 9208, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.75-b04
0x00000000623c0000      8016K   D:\Java\jdk1.7.0_75\jre\bin\server\jvm.dll
0x0000000062ba0000      840K    D:\Java\jdk1.7.0_75\jre\bin\msvcr100.dll
0x0000000062cc0000      144K    D:\Java\jdk1.7.0_75\jre\bin\sunec.dll
0x0000000062cf0000      68K     D:\Java\jdk1.7.0_75\jre\bin\nio.dll
0x0000000062d10000      100K    D:\Java\jdk1.7.0_75\jre\bin\net.dll
0x0000000062d30000      160K    D:\Java\jdk1.7.0_75\jre\bin\java.dll
0x00000000634d0000      84K     D:\Java\jdk1.7.0_75\jre\bin\zip.dll
0x0000000065950000      44K     D:\Java\jdk1.7.0_75\jre\bin\sunmscapi.dll
0x0000000065960000      60K     D:\Java\jdk1.7.0_75\jre\bin\verify.dll
0x0000000065970000      44K     D:\Java\jdk1.7.0_75\jre\bin\management.dll
...

3.2

-dump:[live,] format=b, file=filename

转储Java堆hprof二进制格式。指定live,标识转储active状态的对象。生成的文件可以由jhat命令查看。

C:\Users\Administrator>jmap -dump:format=b,file=9208_0413.hprof 9208
Dumping heap to C:\Users\Administrator\9208_0413.hprof ...
Heap dump file created

3.3 -finalizerinfo

打印将要结束的对象的信息

C:\Users\Administrator>jmap -finalizerinfo  9208
Attaching to process ID 9208, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.75-b04
Number of objects pending for finalization: 0

3.4 -heap

打印垃圾收集和heap摘要信息,以及生成-wise 堆使用的堆摘要

C:\Users\Administrator>jmap -heap 9208
Attaching to process ID 9208, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.75-b04

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 0
   MaxHeapFreeRatio = 100
   MaxHeapSize      = 2124414976 (2026.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 68157440 (65.0MB)
   used     = 16646688 (15.875518798828125MB)
   free     = 51510752 (49.124481201171875MB)
   24.423875075120193% used
From Space:
   capacity = 5242880 (5.0MB)
   used     = 5228248 (4.986045837402344MB)
   free     = 14632 (0.01395416259765625MB)
   99.72091674804688% used
To Space:
   capacity = 15728640 (15.0MB)
   used     = 0 (0.0MB)
   free     = 15728640 (15.0MB)
   0.0% used
PS Old Generation
   capacity = 88080384 (84.0MB)
   used     = 27239848 (25.977943420410156MB)
   free     = 60840536 (58.022056579589844MB)
   30.9261231195359% used
PS Perm Generation
   capacity = 22020096 (21.0MB)
   used     = 15369592 (14.657585144042969MB)
   free     = 6650504 (6.342414855957031MB)
   69.7980244954427% used

10057 interned Strings occupying 867832 bytes.

3.5 -histo[:live]

打印堆的直方图

  num     #instances         #bytes  class name
----------------------------------------------
 ...
 
 877:             1             32  [Lcom.sun.jndi.ldap.pool.Pool;
 878:             2             32  com.sun.org.apache.xerces.internal.impl.dv.dtd.ENTITYDatatypeValidator
 879:             2             32  java.lang.Shutdown$Lock
 880:             1             32  org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler
 881:             2             32  com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver
 882:             1             32  java.lang.reflect.WeakCache$CacheKey
 883:             1             32  java.text.FieldPosition
 884:             1             32  java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
 885:             2             32  sun.security.x509.CertificateVersion
 886:             2             32  [Lorg.apache.catalina.deploy.ContextEnvironment;
 887:             1             32  [Lorg.apache.tomcat.util.net.AbstractEndpoint$Acceptor$AcceptorState;
 888:             1             32  sun.nio.cs.StandardCharsets
 ...

3.6 -clstats

java 堆的wise统计。1.7.0_75不支持该项

(2)jhat

2.1作用

分析Java堆。该jhat命令解析Java堆转储文件并启动Web服务器。jhat命令可以让你浏览堆转储。支持OQL语法。

2.2使用

jhat [ options ] heap-dump-file

2.3参数说明

1.-stack false|true

关闭跟踪对象分配调用堆栈。默认值是true。

-refs false|true

关闭对象的引用的跟踪。默认为true。

-port port-number

设置端口的jhatHTTP服务器。默认值是7000。

-exclude exclude-file

指定列出了应当从可及的对象查询排除数据成员的文件

-baseline exclude-file

指定基准堆转储。在具有相同的对象ID两个堆转储对象被标记为不是新对象。这是用于比较两个不同的堆转储有用。

-debug int

0级表示没有调试输出

C:\Users\Administrator>jhat -port 8000  9208_0413.hprof
Reading from 9208_0413.hprof...
Dump file created Thu Apr 13 21:18:58 CST 2017
Snapshot read, resolving...
Resolving 389761 objects...
Chasing references, expect 77 dots..........................................................................
Eliminating duplicate references............................................................................
Snapshot resolved.
Started HTTP server on port 8000
Server is ready.

接下来,就可以通过浏览器访问查看。http://localhost:8000/。

(3)jinfo

3.1作用

生成的配置信息。如果指定的进程是在64位JVM上运行,那么你可能需要指定-J-d64选项

3.2使用

jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [ servier-id ] remote-hostname-or-IP

3.3选项参数

no-option:既打印命令行标志和系统属性键值对。

-flag name

打印名和指定的命令行标志的值。

-flag [+|-]name

开启或禁止指定的布尔命令行标志。

-flag name=value

设置指定的命令行标志为指定值。

-flags

打印命令行标志传递给JVM。

-sysprops

打印Java系统属性键值对。

打印进程的命令行参数

C:\Users\Administrator>jinfo -flags 9208
Attaching to process ID 9208, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.75-b04

-Djava.util.logging.config.file=D:\apache-tomcat-7.0.67\conf\logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
 -Djava.endorsed.dirs=D:\apache-tomcat-7.0.67\endorsed -Dcatalina.base=D:\apache-tomcat-7.0.67 -Dcatalina.home=D:\apache-tomcat-7.0.67 -Djava.io.
tmpdir=D:\apache-tomcat-7.0.67\temp
#在catalina.sh中可以找到设置的地方

打印参数值

#值类型参数
C:\Users\Administrator>jinfo -flag NewSize 9208
-XX:NewSize=1310720

#开关类型参数
C:\Users\Administrator>jinfo -flag PrintGC 9208
-XX:-PrintGC

C:\Users\Administrator>jinfo -flag Xmn 9208
no such flag ‘Xmn‘

可以总结出:-xms,-xmn系列参数不能通过jinfo指定或打印;jinfo命令作用于-XX:***格式的参数。

设置参数值

C:\Users\Administrator>jinfo -flag PrintGC 9208
-XX:-PrintGC

C:\Users\Administrator>jinfo -flag +PrintGC 9208

C:\Users\Administrator>jinfo -flag PrintGC 9208
-XX:+PrintGC
//2 windows环境总是失败

C:\Users\Administrator>jinfo -flag PermSize=21750000 9208
Exception in thread "main" java.io.IOException: Command failed in target VM
        at sun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:112)
        at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217)
        at sun.tools.attach.HotSpotVirtualMachine.setFlag(HotSpotVirtualMachine.java:190)
        at sun.tools.jinfo.JInfo.flag(JInfo.java:123)
        at sun.tools.jinfo.JInfo.main(JInfo.java:76)

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

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

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

时间: 2024-10-17 23:03:12

java自带命令行工具(jmap,jhat,jinfo)的相关文章

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 fi

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

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

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

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

JDK的命令行工具

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

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

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

Wireshark命令行工具tshark

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

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