美文网首页
常用JVM诊断命令

常用JVM诊断命令

作者: 慢游世界 | 来源:发表于2019-08-12 10:35 被阅读0次

    top

    使用top主要查看各进程CPU、内存使用情况。

    top命令截图
    top -Hp pid 还可以定位到某个具体线程,测试使用发现内存那列都是一样的(都显示的进程占用的内存),而CPU是不一样的,所以top -Hp pid可以查看每个线程的CPU占用情况。
    top -Hp pid命令截图
    当进程CPU占用比较高时,可以查看具体哪个线程使用CPU比较高,再通过jstack pid |grep tid的十六进制 -A 30查看线程堆栈信息,从而定位导致CPU占用较高的代码。

    jmap

    jmap可以查看堆内存初始化配置信息以及堆内存的使用情况。


    jmap -heap pid命令截图

    我们可以使用 jmap -histo[:live] pid 查看堆内存中的对象数目、大小统计直方图,如果带上 live 则只统计活对象。


    jmap -histo[:live] pid命令截图
    还可以使用jmap -dump:format=b,file=name.dump pid 导出dump文件,用visualVM软件进行分析。
    当发生内存溢出或老年代占用率过高,可以使用以上命令分析。

    jstat

    jstat -option可以监测 Java 应用程序的实时运行情况,包括堆内存信息以及垃圾回收信息,具体选项如下:

    • -class:显示 ClassLoad 的相关信息;
    • -compiler:显示 JIT 编译的相关信息;
    • -gc:显示和 gc 相关的堆信息;
    • -gccapacity:显示各个代的容量以及使用情况;
    • -gcmetacapacity:显示 Metaspace 的大小;
    • -gcnew:显示新生代信息;
    • -gcnewcapacity:显示新生代大小和使用情况;
    • -gcold:显示老年代和永久代的信息;
    • -gcoldcapacity :显示老年代的大小;
    • -gcutil:显示垃圾收集信息;
    • -gccause:显示垃圾回收的相关信息(通 -gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;
    • -printcompilation:输出 JIT 编译的方法信息。
      这里详细记录下jstat -gcutil 时间间隔(毫秒)命令,这个命令会持续输出堆内存各个区的使用率和垃圾收集情况。
      jstat -gcutil pid 时间间隔(毫秒)命令截图
    • S0:Survivor S0区的内存使用率。
    • S1:Survivor S1区的内存使用率。
    • E:Eden区的内存使用率。
    • O:老年代的内存使用率。
    • P:永久代的内存使用率。
    • YGC:Minor GC发生的次数。
    • YGCT:Minor GC共消耗的时间(s)。
    • FGC:Full GC发生的次数。
    • FGCT:Full GC共消耗的时间。
    • GCT:Minor GC 和 Full GC共消耗的时间。

    jstack

    jstack pid经常用来查看线程的堆栈信息,通常结合top -Hp pidpidstat -p pid -t来使用,比如通过top -Hp pid定位到了CPU使用率高的线程,再使用jstack pid可以定位CPU使用率高的代码。

    jstack pid命令截图

    相关文章

      网友评论

          本文标题:常用JVM诊断命令

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