• 技术文章 >Java >java教程

    分享java自带命令行工具jmap、jhat与jinfo的方法详解

    Y2JY2J2017-04-28 10:19:01原创1772
    本篇文章主要通过代码实例对java自带命令行工具jmap、jhat与jinfo的使用做出了详解,需要的朋友可以参考下

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

    (1)JMAP

    1.作用

    打印进程,core文件,和远程进程的共享对象存储map或堆存储器的详细信息。

    2.使用

    jmap[options]pid
    jmap[options]executablecore
    jmap[options][pid]server-id@]remote-hostname-or-IP

    如果指定的进程是在64位Java虚拟机(JVM)上运行,那么你可能需要指定-J-d64选项,例如:jmap -J-d64 -heap pid。

    3.参数选项

    3.1

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

    C:\Users\Administrator>jmap9208
    AttachingtoprocessID9208,pleasewait...
    Debuggerattachedsuccessfully.
    Servercompilerdetected.
    JVMversionis24.75-b04
    0x00000000623c00008016KD:\Java\jdk1.7.0_75\jre\bin\server\jvm.dll
    0x0000000062ba0000840KD:\Java\jdk1.7.0_75\jre\bin\msvcr100.dll
    0x0000000062cc0000144KD:\Java\jdk1.7.0_75\jre\bin\sunec.dll
    0x0000000062cf000068KD:\Java\jdk1.7.0_75\jre\bin\nio.dll
    0x0000000062d10000100KD:\Java\jdk1.7.0_75\jre\bin\net.dll
    0x0000000062d30000160KD:\Java\jdk1.7.0_75\jre\bin\java.dll
    0x00000000634d000084KD:\Java\jdk1.7.0_75\jre\bin\zip.dll
    0x000000006595000044KD:\Java\jdk1.7.0_75\jre\bin\sunmscapi.dll
    0x000000006596000060KD:\Java\jdk1.7.0_75\jre\bin\verify.dll
    0x000000006597000044KD:\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.hprof9208
    DumpingheaptoC:\Users\Administrator\9208_0413.hprof...
    Heapdumpfilecreated

    3.3-finalizerinfo

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

    C:\Users\Administrator>jmap-finalizerinfo9208
    AttachingtoprocessID9208,pleasewait...
    Debuggerattachedsuccessfully.
    Servercompilerdetected.
    JVMversionis24.75-b04
    Numberofobjectspendingforfinalization:0

    3.4 -heap

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

    C:\Users\Administrator>jmap-heap9208
    AttachingtoprocessID9208,pleasewait...
    Debuggerattachedsuccessfully.
    Servercompilerdetected.
    JVMversionis24.75-b04
     
    usingthread-localobjectallocation.
    ParallelGCwith4thread(s)
     
    HeapConfiguration:
    MinHeapFreeRatio=0
    MaxHeapFreeRatio=100
    MaxHeapSize=2124414976(2026.0MB)
    NewSize=1310720(1.25MB)
    MaxNewSize=17592186044415MB
    OldSize=5439488(5.1875MB)
    NewRatio=2
    SurvivorRatio=8
    PermSize=21757952(20.75MB)
    MaxPermSize=85983232(82.0MB)
    G1HeapRegionSize=0(0.0MB)
     
    HeapUsage:
    PSYoungGeneration
    EdenSpace:
    capacity=68157440(65.0MB)
    used=16646688(15.875518798828125MB)
    free=51510752(49.124481201171875MB)
    24.423875075120193%used
    FromSpace:
    capacity=5242880(5.0MB)
    used=5228248(4.986045837402344MB)
    free=14632(0.01395416259765625MB)
    99.72091674804688%used
    ToSpace:
    capacity=15728640(15.0MB)
    used=0(0.0MB)
    free=15728640(15.0MB)
    0.0%used
    PSOldGeneration
    capacity=88080384(84.0MB)
    used=27239848(25.977943420410156MB)
    free=60840536(58.022056579589844MB)
    30.9261231195359%used
    PSPermGeneration
    capacity=22020096(21.0MB)
    used=15369592(14.657585144042969MB)
    free=6650504(6.342414855957031MB)
    69.7980244954427%used
     10057internedStringsoccupying867832bytes.

    3.5 -histo[:live]

    打印堆的直方图

    num#instances#bytesclassname
    ----------------------------------------------
    ...
    877:132[Lcom.sun.jndi.ldap.pool.Pool;
    878:232com.sun.org.apache.xerces.internal.impl.dv.dtd.ENTITYDatatypeValidator
    879:232java.lang.Shutdown$Lock
    880:132org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler
    881:232com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver
    882:132java.lang.reflect.WeakCache$CacheKey
    883:132java.text.FieldPosition
    884:132java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
    885:232sun.security.x509.CertificateVersion
    886:232[Lorg.apache.catalina.deploy.ContextEnvironment;
    887:132[Lorg.apache.tomcat.util.net.AbstractEndpoint$Acceptor$AcceptorState;
    888:132sun.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-port80009208_0413.hprof
    Readingfrom9208_0413.hprof...
    DumpfilecreatedThuApr1321:18:58CST2017
    Snapshotread,resolving...
    Resolving389761objects...
    Chasingreferences,expect77dots..........................................................................
    Eliminatingduplicatereferences............................................................................
    Snapshotresolved.
    StartedHTTPserveronport8000
    Serverisready.

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

    (3)jinfo

    3.1作用

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

    3.2使用

    jinfo[option]pid
    jinfo[option]executablecore
    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-flags9208
    AttachingtoprocessID9208,pleasewait...
    Debuggerattachedsuccessfully.
    Servercompilerdetected.
    JVMversionis24.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-flagNewSize9208
    -XX:NewSize=1310720
     
    #开关类型参数
    C:\Users\Administrator>jinfo-flagPrintGC9208
    -XX:-PrintGC
     
    C:\Users\Administrator>jinfo-flagXmn9208
    nosuchflag'Xmn'

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

    设置参数值

    C:\Users\Administrator>jinfo-flagPrintGC9208
    -XX:-PrintGC
     
    C:\Users\Administrator>jinfo-flag+PrintGC9208
     
    C:\Users\Administrator>jinfo-flagPrintGC9208
    -XX:+PrintGC
    //2windows环境总是失败
     
    C:\Users\Administrator>jinfo-flagPermSize=217500009208
    Exceptioninthread"main"java.io.IOException:CommandfailedintargetVM
    atsun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:112)
    atsun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217)
    atsun.tools.attach.HotSpotVirtualMachine.setFlag(HotSpotVirtualMachine.java:190)
    atsun.tools.jinfo.JInfo.flag(JInfo.java:123)
    atsun.tools.jinfo.JInfo.main(JInfo.java:76)

    以上就是分享java自带命令行工具jmap、jhat与jinfo的方法详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:分享三种Java追加文件内容的方法实例 下一篇:Java中NIO和IO区别和适用场景
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 一招教你使用java快速创建Map(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一文讲解Java中初始化List集合的8种方式(附代码)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网