码迷,mamicode.com
首页 > 其他好文 > 详细

JVM-调优命令

时间:2018-04-18 21:21:55      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:虚拟机   服务   情况下   efs   ast   pil   技术分享   ack   永久   

jps

  JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。

  命令格式:

      jps [options] [hostid]

  option参数:

-l : 输出主类全名或jar路径
-q : 只输出LVMID
-m : 输出JVM启动时传递给main()的参数
-v : 输出JVM启动时显示指定的JVM参数

  其中[option]、[hostid]参数也可以不写。

jstat

  jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

  命令格式:

    jstat [option] LVMID [interval][count]

   参数: 

[option] : 操作参数
LVMID : 本地虚拟机进程ID
[interval] : 连续输出的时间间隔
[count] : 连续输出的次数

  option参数:

 

OptionDisplays…
-class class loader的行为统计。Statistics on the behavior of the class loader.
-compiler HotSpt JIT编译器行为统计。Statistics of the behavior of the HotSpot Just-in-Time compiler.
-gc 垃圾回收堆的行为统计。Statistics of the behavior of the garbage collected heap.
-gccapacity 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。Statistics of the capacities of the generations and their corresponding spaces.
-gcutil 垃圾回收统计概述。Summary of garbage collection statistics.
-gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。Summary of garbage collection statistics (same as -gcutil), with the cause of the last and
-gcnew 新生代行为统计。Statistics of the behavior of the new generation.
-gcnewcapacity 新生代与其相应的内存空间的统计。Statistics of the sizes of the new generations and its corresponding spaces.
-gcold 年老代和永生代行为统计。Statistics of the behavior of the old and permanent generations.
-gcoldcapacity 年老代行为统计。Statistics of the sizes of the old generation.
-gcpermcapacity 永生代行为统计。Statistics of the sizes of the permanent generation.
-printcompilation HotSpot编译方法统计。HotSpot compilation method statistics.

   option参数详解:

     -class

      监视类装载、卸载数量、总空间以及耗费的时间

      技术分享图片

    -compiler

      输出JIT编译过的方法数量耗时等

      技术分享图片

    -gc

      垃圾回收堆的行为统计

      技术分享图片技术分享图片

      技术分享图片

    -gccapacity

      同-gc,不过还会输出Java堆各区域使用到的最大、最小空间

       技术分享图片技术分享图片

      技术分享图片

    -gcutil

      同-gc,不过输出的是已使用空间占总空间的百分比

       技术分享图片

    -gccause

       垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因

       技术分享图片技术分享图片

      技术分享图片

     -gcnew

      统计新生代的行为

      技术分享图片

    -gcnewcapacity

      新生代与其相应的内存空间的统计

      技术分享图片技术分享图片

      技术分享图片

    -gcold

      统计老年代的行为

      技术分享图片

    -gcoldcapacity

      统计老年代的大小和空间

      技术分享图片

    -gcpermcapacity

      永久代行为统计

       技术分享图片

    -printcompilation

       hotspot编译方法统计

      技术分享图片

Compiled:被执行的编译任务的数量
Size:方法字节码的字节数
Type:编译类型
Method:编译方法的类名和方法名。类名使用"/" 代替 "." 作为空间分隔符. 方法名是给出类的方法名. 格式是一致于HotSpot - XX:+PrintComplation 选项

 jmap

  jmap(JVM Memory Map)命令用于生成heap dump文件,如果不使用这个命令,还阔以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。 jmap不仅能生成dump文件,还阔以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前

  使用的是哪种收集器等。

   命令格式:

    jmap [option] LVMID

  option参数:

dump : 生成堆转储快照
finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
heap : 显示Java堆详细信息
histo : 显示堆中对象的统计信息
permstat : to print permanent generation statistics
F : 当-dump没有响应时,强制生成dump快照

 

  示例:

    -dump::live,format=b,file=<filename> pid

    dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名

    技术分享图片

    dump.hprof这个后缀是为了后续可以直接用MAT(Memory Anlysis Tool)打开。

    -finalizerinfo

    打印等待回收对象的信息

    技术分享图片

    可以看到当前F-QUEUE队列中并没有等待Finalizer线程执行finalizer方法的对象。

    -heap

    打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况,可以用此来判断内存目前的使用情况以及垃圾回收情况

    技术分享图片

                                           可以很清楚的看到Java堆中各个区域目前的情况。

    -histo

    打印堆的对象统计,包括对象数、内存大小等等 (因为在dump:live前会进行full gc,如果带上live则只统计活对象,因此不加live的堆大小要大于加live堆的大小 )

    技术分享图片

    -permstat

    打印Java堆内存的永久保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。

    技术分享图片

    -F

    强制模式。如果指定的pid没有响应,请使用jmap -dump或jmap -histo选项。此模式下,不支持live子选项。

jhat

  jhat(JVM Heap Analysis Tool)命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的

  dump文件复制到本地或其他机器上进行分析。

  命令格式:

    jhat [dumpfile]

  参数:

-stack false|true 关闭对象分配调用栈跟踪(tracking object allocation call stack)。 如果分配位置信息在堆转储中不可用. 则必须将此标志设置为 false. 默认值为 true.>
-refs false|true 关闭对象引用跟踪(tracking of references to objects)。 默认值为 true. 默认情况下, 返回的指针是指向其他特定对象的对象,如反向链接或输入引用(referrers or incoming references), 会统计/计算堆中的所有对象。>
-port port-number 设置 jhat HTTP server 的端口号. 默认值 7000.>
-exclude exclude-file 指定对象查询时需要排除的数据成员列表文件(a file that lists data members that should be excluded from the reachable objects query)。 例如, 如果文件列列出了 java.lang.String.value , 那么当从某个特定对象 Object o 计算可达的对象列表时, 引用路径涉及 java.lang.String.value 的都会被排除。>
-baseline exclude-file 指定一个基准堆转储(baseline heap dump)。 在两个 heap dumps 中有相同 object ID 的对象会被标记为不是新的(marked as not being new). 其他对象被标记为新的(new). 在比较两个不同的堆转储时很有用.>
-debug int 设置 debug 级别. 0 表示不输出调试信息。 值越大则表示输出更详细的 debug 信息.>
-version 启动后只显示版本信息就退出>
-J< flag > 因为 jhat 命令实际上会启动一个JVM来执行, 通过 -J 可以在启动JVM时传入一些启动参数. 例如, -J-Xmx512m 则指定运行 jhat 的Java虚拟机使用的最大堆内存为 512 MB. 如果需要使用多个JVM启动参数,则传入多个 -Jxxxxxx.

  示例:

    技术分享图片

    分析同样一个dump快照,MAT需要的额外内存比jhat要小的多的多,所以建议使用MAT来进行分析,当然也看个人偏好。

  分析:

    打开浏览器Http://localhost:7000,该页面提供了几个查询功能可供使用:

    技术分享图片

    一般查看堆异常情况主要看这个两个部分: Show instance counts for all classes (excluding platform),平台外的所有对象信息。如下图: 

    技术分享图片

jstack

  jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调

  用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的

  java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

  命令格式:

    jstack [option] LVMID

  option参数:

-F : 当正常输出请求不被响应时,强制输出线程堆栈
-l : 除堆栈外,显示关于锁的附加信息
-m : 如果调用到本地方法的话,可以显示C/C++的堆栈

  示例:

    技术分享图片

jinfo:

  jinfo(JVM Configuration info)这个命令作用是实时查看和调整虚拟机运行参数。 之前的jps -v口令只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用jinfo口令

  命令格式:

    jinfo [option] [args] LVMID

  option参数:

-flag : 输出指定args参数的值
-flags : 不需要args参数,输出所有JVM参数的值
-sysprops : 输出系统属性,等同于System.getProperties()

  技术分享图片

 

 

参考:

【1】微信:http://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247483966&idx=1&sn=dfa3375d36aa2c0c25a775522e381e62&chksm=ebf6da41dc815357e0d53c73865a23f41219e75bac5a4d510bfa31cc51594b59a20e2e4f6cb8&scene=21#wechat_redirect

JVM-调优命令

标签:虚拟机   服务   情况下   efs   ast   pil   技术分享   ack   永久   

原文地址:https://www.cnblogs.com/happyflyingpig/p/8870026.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!