• JDK内置工具使用(jps、jstack、jmap、jstat)


    一、JPS

    1、jps -lvm:用于查看当前机器上已装载的jvm


    二、jstack

    1.1:查看进程的线程数,找出进程内最耗费CPU的线程:

    top -Hp 19931 。 可以看到耗费CPU的线程的pid是20097

    1.2:

    printf "%x " 20097

    得到20097的十六进制值为4e81,下面会用到。    

    1.3:jstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁)

    1.3.1:jstack -l 19931 或者 jstack 19931 | grep 4e81: 查看线程的堆栈信息

    1.3.2: jstack -l pid >文件名:生成线程快照

    值得关注的线程状态有:

    ① 死锁:Deadlock(重点关注)
    ② 执行中:Runnable 
    ③ 等待资源:Waiting on condition(重点关注)
    ④ 等待获取监视器:Waiting on monitor entry(重点关注)
    ⑤ 暂停:Suspended
    ⑥ 对象等待中:Object.wait() 或 TIMED_WAITING
    ⑦ 阻塞:Blocked(重点关注) 
    ⑧ 停止:Parked


    三、jmap
    jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等

    1:jmap -heap PID:打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况

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

    jmap -histo:live 19931 | less

    3:jmap -histo:live pid>a.log
    可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。 可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。

    4:jmap -dump:format=b,file=文件名.dump  PID:生成内存dump文件

    可以使用jhat查看,命令如下:

    jhat  -port  9998  文件名.dump

    该命令通常用来分析内存泄漏OOM,通常做法是:

    使用 JVM 参数获取 dump 文件
    进入Tomcat的'bin'目录,在'catalina.sh'文件里添加如下内容

    >-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=c:jakarta-tomcatwebapps

    然后使用MAT分析工具,如jhat命令,eclipse的mat插件。


    四、jstat
    Jstat用于查看gc垃圾回收使用情况:
    - 类的加载及卸载情况
    - 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间

    命令格式如下图:

    option:我们经常使用的选项有gc、gcutil
    vmid:java进程id
    interval:间隔时间,单位为毫秒
    count:打印次数

    堆内存 = 年轻代 + 年老代 + 永久代

    年轻代 = Eden区 + 两个Survivor区(From和To)

    1:类加载统计:

    jstat -class pid

    • Loaded:加载class的数量
    • Bytes:所占用空间大小
    • Unloaded:未加载数量
    • Bytes:未加载占用空间
    • Time:时间

    2:垃圾回收统计

    jstat -gc 15774 1000 10


    • S0C:第一个幸存区的大小
    • S1C:第二个幸存区的大小
    • S0U:第一个幸存区的使用大小
    • S1U:第二个幸存区的使用大小
    • EC:伊甸园区的大小
    • EU:伊甸园区的使用大小
    • OC:老年代大小
    • OU:老年代使用大小
    • MC:方法区大小
    • MU:方法区使用大小
    • CCSC:压缩类空间大小
    • CCSU:压缩类空间使用大小
    • YGC:年轻代垃圾回收次数
    • YGCT:年轻代垃圾回收消耗时间
    • FGC:老年代垃圾回收次数
    • FGCT:老年代垃圾回收消耗时间
    • GCT:垃圾回收消耗总时间

     3:堆内存统计

    jstat -gccapacity pid

    4:总结垃圾回收统计

    jstat -gcutil 15774 1000 10


    • S0:幸存1区当前使用比例
    • S1:幸存2区当前使用比例
    • E:伊甸园区使用比例
    • O:老年代使用比例
    • M:元数据区使用比例
    • CCS:压缩使用比例
    • YGC:年轻代垃圾回收次数
    • FGC:老年代垃圾回收次数
    • FGCT:老年代垃圾回收消耗时间
    • GCT:垃圾回收消耗总时间
  • 相关阅读:
    Neutron分析(5)—— neutron-l3-agent中的iptables
    Neutron分析(4)—— neutron-dhcp-agent
    Neutron分析(3)—— neutron-l3-agent
    Neutron分析(2)——neutron-server启动过程分析
    Neutron分析(1)——简介
    RDO部署openstack(3)
    RDO部署openstack(2)
    Peewee之playhouse中的数据库连接池(原创)
    图数据库简介(转)
    RESTful API 最佳实践(转)
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/15024320.html
Copyright © 2020-2023  润新知