深入浅出JVM之线上虚拟机工具

  1. jps

    JVM Process Status Tool是其中典型的jvm工具,除了名字像Unix的ps命令之外,它的功能也和ps命令类似,可以列出正在运行的虚拟机进程,并显示虚拟机正在执行主类(Main Class、main()函数所在的类)名称以及这些进程本地虚拟机唯一id,虽然功能比较单一,但它是使用频率最高的JDK命令工具。

    1. jps 查看pid

      在这里插入图片描述

    2. jps -l 展示类的全限定名,如果进程执行的是jar包,则输出jar路径

      在这里插入图片描述

    3. jps -m 展示jvm启动类名

      在这里插入图片描述

    4. jps -m 展示jvm启动参数

      在这里插入图片描述

  2. jstat(JVM Statictics Monitoring Tool)是用于监视各种运行状态信息的命令工具,它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GU图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具

  3. jstat命令使用:

    jstat -gc pid 间隔时间 打印次数

    jstat -gc 51020 250 20 每隔250毫秒打印一次,一共20次

    S0C 第一个幸存区的大小

    S1C 第二个幸存区的大小

    S0U 第一个幸存区实际使用的大小

    S1C 第二个幸存区实际使用的大小

    EC Eden区的大小

    EU Eden区实际使用的大小

    OC 老年代大小

    OU 老年代实际使用的大小

    MC 方法区大小

    MU 方法区实际使用的大小

    CCSC 压缩类空间大小

    CCSU 压缩类空间实际使用大小

    YGC 年轻代垃圾回收此时

    YGCT 年轻代垃圾回收消耗时间

    FGC 老年代垃圾回收次数

    FGCT 老年代垃圾回收消耗时间

    GCT 垃圾回收总消耗时间

  4. jinfo(Configuretion Info For Java)的作用是实时的查看和调整虚拟机各项参数。使用jps -v可以查看虚拟机启动时显示指定的参数列表,但如果想知道未被显示指定的参数的系统默认值,除了去找资料外,就只能使用jinfo 的 -flag选项进行查询了。

  5. jinfo命令使用

    jinfo -flag CMSInititingOccupancyFraction 1444

  6. jmap(Memory Map For Java)命令用于生成堆栈存储快照。如果不使用jmap命令,想要获取Java堆栈存储快照,还有一些暴力的手段-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常时生成Dump文件,用于系统复盘。

    和info命令一样,jmap有不少功能在Windows平台下时受限的,出了生成dump文件的-dump选项和用于查看每个类的实例、空间占用统计的-histo选项在所有操作系统都提供之外,其余选项都只能在Linux/Solaris下使用。

  7. jmap命令使用

    jmap -dump 生成Java堆栈存储快照,格式为jmap -dump: format=b,file=

    jmap -histo 显示堆中对象统计信息,包括类、实例数量、合计容量(分页查看)

    jmap -heap 13388

  8. jhat(JVM Heap Analysis Tool)命令常与jmap搭配使用,来分析jmap生成的堆栈存储快照,jhat内置了一个微型的HTTP/HTML服务器,生成Dump文件分析的结果后可以在浏览器中查看(localhost:7000)。

  9. jhat特点

    1. jhat分析工作是一个耗时且耗硬件资源的过程
    2. jhat的分析功能相对来说比较简陋
  10. jhat的使用

    jhat 文件名称

  11. jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)

  12. 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因。如线程死锁、死循环、请求外部资源导致长时间的等待等。线程出现停顿的时候通过jstack来查看各线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

  13. 线上程序一般不能用kill进程pid的方式直接关闭

  14. jstack的用法

    1. jstack -l pid
    2. jstack -f 当正常输出的请求不被响应时,强制输出线程堆栈force
  15. 线程状态

    1. NEW 线程创建
    2. RUNNABLE 线程.start,执行状态
    3. BLOCKED 阻塞状态
    4. WAITING 等待状态,一个正在无限期等待另一个线程执行一个特别动作的线程处于 这一状态
    5. TIMED_WAITING 正在限时等待另一个线程执行一个动作
    6. TERMINATED 线程销毁
  16. BLOCKED与WAITING状态的区别

    WAITING是主动的显示的申请的阻塞,BLOCKED属于被动的阻塞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值