【一起学习JVM】Java命令行工具

Java的命令行工具基本都知道在bin目录下有java.exejavac.exe这两个,但是在JDK中还内置了其他的有用的性能监控、故障处理、查看JVM的一些工具,可以直观的看到JVM中数据和JVM参数等

工具总结

名称主要作用
jps显示当前系统的所有的JVM进程
jstat查看当前内存使用占比和方法区的类加载数量
jinfo显示JVM的配置信息,可以直接看到JVM的各项设置的参数
jmap查看JVM的堆内存的信息、堆转储快照
jhat用于分析heapdump文件,可以在浏览器中查看分析的结果
jstack显示JVM中栈的内存快照信息
jps

查看指定hostid的JVM进程信息,如果不指定hostid,那么就是当前系统

  • 命令格式

    jps [options] [hostid]

    可以查看指定的hostid的虚拟机进程pid

  • 执行jps

    可以看到启动的Java项目的进程可以显示到,并且可以看到该进程的PID

    jps命令
  • 参数

    jps -v 可以查看JVM启动时的参数

    jps -l 可以查看主类的全名

    jps -m 输出虚拟机启动时传递给主类main()函数的参数

jstat

查看当前虚拟机的统计信息

  • 命令格式

    jstat [option] pid [intervals[s/ns]] [count]

    • option表示命令的可选参数,可以查看不同的信息
    • pid 表示进程号
    • intervals 表示间隔时间
    • count 表示一共查询多少次
  • 常用参数

    option作用
    -class查看当前方法区的类的数量和占用的内存空间
    -gc监视JVM中堆内存,主要有Eden、Survivor from、Survivor to、老年代、永久代等内存状态、GC的次数和占用的时间
    -gccause和-gc基本相同,不过会输出导致上一次GC的原因
    -gcutil和-gc基本相同,但是显示的信息表示为百分比,信息较为简洁
    -gcnew监视新生代的GC状况
    -gcold监视老年代的GC状况
    -compiler
    输出JIT编译器编译过的方法、耗时等信息
    -printcompilation
    输出已经被JIT编译过的方法
  • 查询当前堆内存、GC情况

    先通过jps或者top命令找到对应的pid

    • jstat -gc 8596

      jstat命令

      S0C:表示Survivor0区域的内存大小

      S1C:表示Survivor1区域的内存大小

      S0U:表示Survivor0区域已经使用的内存大小

      S1U:表示Survivor1区域已经使用的内存大小

      EC:Eden区域的内存大小

      EU:Eden区域已经使用的内存大小

      OC:老年代的内存大小

      OU:老年代已经使用的内存大小

      MC:方法区的内存大小

      MU:方法区已使用的内存

      YGC:Minor GC已经发生的次数

      YGCT:Minor GC总共使用的时间

      FGC:Full GC发生的次数

      FGCT:Full GC总共使用的时间

      GCT:总的GC占用时间

jinfo

实时的查看JVM的各项参数

  • 命令格式

    jinfo [option] pid

可以通过jps -v 查看到虚拟机启动的参数列表,如果想直接查看某个指定的参数的数据,那么可以通过jinfo查看

  • 查看JVM配置参数

    jinfo -flags pid

    jinfo pid 可以查看到全面的系统信息和JVM信息

    jinfo命令

jmap

用于生成堆转储快照或者查看当前堆内存信息

  • 命令格式

    jmap [option] pid

  • 查看JVM进程的堆内存信息

    jmap -heap pid
    jmp命令

  • 统计当前堆内存中类数量、占用内存信息

    jmap histo pid

  • 生成堆内存快照

    jmap -dump:format=b,file=app.dump 14236

    会在当前的目录下生成app.dump文件,将当前的堆内存快照保存到文件中,可以使用jvisualvmMAT等工具进行分析

    jmap -dump:format=b,file=app.hprof 14236也可以生成堆转储快照,不同的是hprof文件可以通过jprofile来进行分析

jhat

虚拟机提供的堆转储快照分析工具

  • 命令格式

    jhat app.dump

  • 可以展示dump文件的分析内容,会提供一个网页,在指定的端口可以打开,不过分析工具可以选择更加直观和完善的visualvm或者MAT

jstack

查看JVM中的栈内存空间信息、生成线程快照等

  • 命令格式

    jstack [option] pid

  • 查看当前的线程快照信息

    jstack -l pid

    • -l表示除堆栈外,将锁的信息也显示

    会有大量的堆栈信息展示在控制台

    jstack -l pid >> thread.dump

    将内容输出到文件中,然后根据线程的十六进制信息查找对应的堆栈信息

  • 查找指定线程的堆栈信息(推荐

    1. 使用top命令查看占用CPU最高的进程(按大写P对cpu使用排序)
    2. 使用ps -ef或者jps -l查看该进程的pid
    3. 定位到具体的线程,使用top -Hp pid或者ps -mp pid -o THREAD,tid,time,查看占用cpu或者内存过高的线程id
    4. 将线程id转换为对应的16进制printf "%x\n" 线程id
    5. 使用jstack -l 进程Id|grep 线程id(小写英文) -A60查看堆栈信息

JDK可视化工具

  • Jconsole

    在Jconsole中可以查看远程或者当前机器的内存、线程、类等信息

    在控制台中直接使用jconsole命令就可以打开,该工具位于jdk/bin

  • jvisualvm

    JDK自带的分析堆转储快照的可视化工具,可以对堆转储的快照进行分析,确定线程状态、内存占用实例、JVM参数、系统属性等信息

    在控制台中使用jvisualvm会自动打开,该工具位于jdk/bin

  • visualvm

    最强大的监视和故障处理工具,和Jvisualvm类似,不过在某些功能和插件上比jvisualvm更强大,使用方式一致,不过需要单独下载visualvm

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值