美文网首页
JVM工具以及Shell命令

JVM工具以及Shell命令

作者: heyong | 来源:发表于2018-09-13 20:24 被阅读51次

    一、Jmap

    jmap [option] pid
    

    (一) 参数

    1. -dump:[live,]format=b,file=
      使用hprof二进制形式,输出jvm的heap内容到file参数指定的文件。 live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

    2. -finalizerinfo
      打印正等候回收的对象的信息.

    3. -heap
      打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

    4. -histo[:live]
      打印每个class的实例数目,内存占用,类全名信息。VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.

    5. -clstats
      打印classloader的信息。包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

    (二) 实例

    1、 查看对象实例统计数据

     jmap -histo pid  或者 jmap -histo:live pid
    

    2、 查看系统ClassLoader信息

    jmap -clstats pid 
    

    3、 获取当前堆快照

    jmap -dump:format=b,file=heap.hprof pid
    

    (三) 注意

    1. jmap -dump
      这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用。

    2. jmap -clstats
      这个命令执行,JVM会去统计classloader信息,这整个过程也会比较的耗时,并且同样也会暂停应用

    3. jmap -histo:live
      这个命令执行,JVM会先触发gc,然后再统计信息。

    二、Jstack

     jstack [option] pid
    

    (一) 参数

    1. -F 强制打印堆栈

    2. -m 打印java 和 native(C++) 堆栈信息

    3. -l 打印额外的信息,包括锁信息

    (二) 案例

    1、获取某个线程的堆栈信息

     jstack pid > jstack.txt
    

    2、定位消耗CPU最多的线程

     https://mp.weixin.qq.com/s/c-KuGjI_VH1dTxIWtxZJEg
    

    3、IBM工具使用分析线程堆栈信息

     https://www.ibm.com/developerworks/cn/java/j-java8idioms1/index.html
    

    (三) 注意

    1. 使用jstack打印堆栈的时候,会中断服务,导致短时间类服务不可用

    三、Jstat

     jstat -<option> <vmid> [<interval> [<count>]]
     
     jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
    

    (一) 参数

    1. option 选项

      -class: 类加载器的统计信息

      -compiler: JIT编译的统计信息

      -gc: 垃圾回收统计

      -gccapacity: 堆内存统计

      -gccause: 产生GC的原因

      -gcnew: 新生代垃圾回收统计

      -gcnewcapacity: 新生代内存统计

      -gcold: 老年代垃圾回收统计

      -gcoldcapacity: 老年代内存统计

      -gcmetacapacity: 元数据空间统计

      -gcutil: 垃圾收集统计信息

      -printcompilation: JVM编译方法统计

    1. -t 参数可以在输出信息前加上一列timestamp,表示程序运行的时间

    2. -h 参数可以指定周期性数据输出时,输出多少行数据后,输出一个表头信息

    3. interval 参数用户指定输出统计数据的周期,单位为毫秒

    4. count 参数用户指定一共输出多少次数据

    (二) 案例

    (三) 推荐

    http://lovestblog.cn/blog/2016/07/20/jstat/

    参数

    -XX:+HeapDumpOnOutOfMemoryError 虚拟机出现OOM的时候自动生成dump文件

    推荐参数

    -XX:+HeapDumpOnOutOfMemoryError 
    -XX:HeapDumpPath=/data/log/gclog/ 
    -Xloggc:/data/log/gclog/gc.log 
    

    Shell命令

    1、查看进程执行的时间

    ps -p pid -o etime

    2、查看java线程

    ps -ef | grep java | grep -v "grep"

    3、获取消耗CPU最多的线程

    top -Hp pid

    扩展

    命令帮助中出现的[] <>含义
    在查看命令帮助时,会出现[],<>,|等符号,它们的含义如下:
    [] 表示是可选的;
    <> 表示是可变化的;
    x|y|z 表示只能选择一个;
    -abc 表示三个参数(或任何二个)的混合使用

    相关文章

      网友评论

          本文标题:JVM工具以及Shell命令

          本文链接:https://www.haomeiwen.com/subject/eauggftx.html