zoukankan      html  css  js  c++  java
  • 线上问题排查(2)——JDK内置工具

    常用命令目录:


     

    1. jps

    用于查看JVM里面所有进程的具体状态包括进程ID,进程启动的路径等等

    参数格式:

    -m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null

    -l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。(非常适用于task任务)

    -v 输出传给JVM的参数。


    示例:

     

    [yang@vm-cbu-qa-172-43 ~]$ jps
    12384 start.jar
    10991 TimeoutMain
    4309 AliWWMain
    24586 Jps
    [yang@vm-cbu-qa-172-43 ~]$ jps -v
    12384 start.jar -DappName=tradecenter:6100 -Dcom.taobao.pandora.tmp_path=/home/yang/output/logs/6100/pandora -DHSF.LOG.PATH=/home/yang/output/logs/6100/hsf -Xms256m -Xmx1024m -XX:MaxPermSize=128m -Ddatabase.codeset=ISO-8859-1 -Ddatabase.logging=false -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=GBK -Djava.util.logging.config.file=/home/yang/work/tc/tradecenter.deploy/target/web-deploy/conf/general/logging.properties -Dcom.sun.management.config.file=/home/yang/work/tc/tradecenter.deploy/target/web-deploy/conf/jmx/jmx_monitor_management.properties -Dorg.eclipse.jetty.util.URI.charset=GBK -Dhsf.configuration.dir=/home/yang/work/tc/tradecenter.deploy/target/web-deploy/jetty_server_home/tmp -Dlog4j.defaultInitOverride=false -Dcom.taobao.hsf.deploy.serverport=6130 -Dproject.name=tradecenter -Dhsf.server.port=6130 -Ddubbo.service.server.port=6100 -Ddragoon.instance.number=0 -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=6208,server=y,suspend=n -Dcom.sun.management.jmxr
    10991 TimeoutMain -DTaskName=timeoutManager -Xms128m -Xmx512m -XX:PermSize=64m -Djox.xml.encodinged=true -Xdebug -Xrunjdwp:transport=dt_socket,address=9000,server=y,suspend=n
    4309 AliWWMain -DTaskName=aliwwSender -Xms128m -Xmx512m -XX:PermSize=64m -Djox.xml.encodinged=true -Xdebug -Xrunjdwp:transport=dt_socket,address=8333,server=y,suspend=n -DhsfHome=/home/yang/work/tt/trade.task/target/expand/taobao-hsf.sar -Dproject.name=tradetask
    24604 Jps -Dapplication.home=/usr/alibaba/install/jdk1.6.0_25 -Xms8m
    [yang@vm-cbu-qa-172-43 ~]$ jps -l
    12384 /usr/alibaba/jetty/start.jar
    10991 com.alibaba.china.trade.task.timeout.TimeoutMain
    4309 com.alibaba.china.trade.task.aliww.AliWWMain
    24666 sun.tools.jps.Jps
    [yang@vm-cbu-qa-172-43 ~]$ 
     

    2. jstat

    1)简介:

     

    JstatJDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于javabin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。由于JVM内存设置较大,图中百分比变化不太明显一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

    jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。

    它主要是用来显示GC及PermGen相关的信息.

    2)参数:

     

       -class Option

       -compiler Option

       -gc Option

       -gccapacity Option

       -gccause Option

       -gcnew Option

       -gcnewcapacity Option

       -gcold Option

       -gcoldcapacity Option

       -gcpermcapacity Option

       -gcutil Option

       -printcompilation Option

    注:其中最常用的就是  -gcutil  选项了,因为他能够给我们展示大致的GC信息。

    Option:指的是vmid、显示间隔时间及间隔次数等

    vmid    VM的进程号,即当前运行的java进程号

    interval– 间隔时间,单位毫秒

    count   — 打印次数,如果缺省则打印无数次

    3)输出结果

    S0  — Heap上的 Survivor space 0 区已使用空间的百分比

    S0CS0当前容量的大小

    S0US0已经使用的大小

    S1  — Heap上的 Survivor space 1 区已使用空间的百分比

    S1CS1当前容量的大小

    S1US1已经使用的大小

    E   — Heap上的 Eden space 区已使用空间的百分比

    ECEden space当前容量的大小

    EUEden space已经使用的大小

    O   — Heap上的 Old space 区已使用空间的百分比

    OCOld space当前容量的大小

    OUOld space已经使用的大小

    P   — Perm space 区已使用空间的百分比

    PCPerm space当前容量的大小

    PUPerm space已经使用的大小

    YGC — 从应用程序启动到采样时发生 Young GC 的次数

    YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)

    FGC — 从应用程序启动到采样时发生 Full GC 的次数

    FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)

    GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC

    4)示例


     

    图中同时打印了young gcfull gc的总次数、总耗时。而每次young gc消耗的时间,可以用相间隔的两行(红线标示的)YGCT相减得到。每次full gc消耗的时间,可以用相隔的两行FGCT相减得到。

    常驻内存区(P)的使用率,始终停留在64.78%左右,说明常驻内存没有突变,比较正常。如果young gcfull gc能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java内存释放情况正常,垃圾回收及时,java内存泄露的几率就会大大降低,但也不能说明一定没有内存泄露。


    jstat -class 进程id      显示加载 class 的数量,及所占空间等信息。

     

    [yang@vm-cbu-qa-172-43 ~]$ jstat -class 12384 2000
    Loaded  Bytes  Unloaded  Bytes     Time   
     11493 23583.9      195   291.8      12.31


     

    3. jinfo

    格式:jinfo 进程id

    观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数



     

    4. jstack

    观察jvm中当前所有线程的运行情况和线程当前状态 

    详细使用可参考《java服务器load飚高排查思路


     

    5. jmap

    1)简介

    输出内存中对象的工具,打印出某个java进程在内存中所有“对象”的使用情况(如:产生那些对象、数量)

    使用方法 jmap -histo pid。如果使用 jmap -histo pid > aa.log 以将二进制输出到文本(aa.log)中,在一段时间后,使用文本比较工具,可以对比出GC回收了哪些对象。

    jmap -dump:format=b,file=heap.bin  12384  可以将12384进程的内存堆栈输出到heap.bin 文件里,再配合MAT(内存分析工具(Memory Analysis Tool),参考文章  或 jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的反映当前内存是否存在问题。

    如果你的机子是64位,格式:jmap -J-d64 -heap pid

    2)参数格式

     

    -dump:[live,]format=b,file=<filename> 使用hprof二进制形式输出jvmheap内容到文件中。 live子选项是可选的,假如指定live选项那么只输出活的对象

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

    -heap 打印heap的概要信息(年轻代、年老代、持久代的概括使用情况),GC使用的算法,heap的配置及wise heap的使用情况

    -histo[:live] 输出每个对象的实例个数占用字节数、类全名信息 VM的内部类名字开头会加上前缀”*如果加上live子参数,只统计活的对象数量。(ps:默认按内存中占用的字节数大小排序,使用场景较多)

    -permstat 打印classloaderjvm heap的信息。 包含classloader的名字加载的class数量、占用内存大小、classloader、活跃性、类型 

    3)实例



     

    [yang@vm-cbu-qa-172-43 ~]$ jmap -histo 12384 >aa.log 


    上一篇:线上问题排查(1)——java服务器load飚高排查思路


  • 相关阅读:
    Python经典的算法题【多测师】
    百度流氓驱动bd0001.sys【多测师】
    github上的前端面试题
    利用H5 FormData 实现表单中多图上传(可带其他如String类型数据)
    border-color的深入理解
    一个好玩的小制作,以及在<a/>中的标签href="javascript:;"/href="javascript:void(0);"/href="javascript:"的用法
    css进行网站布局
    Mybatis中的<trim>标签应用
    css居中小技巧
    css布局模型
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3253663.html
Copyright © 2011-2022 走看看