jps(jvm process status tool)
列出正在运行的虚拟机进程, 并显示虚拟机执行主类 (Main Class,main() 函数所在的类)名称以及这些进程的本地虚拟机唯一 ID(Local Virtual Machine
Identifier,LVMID)
jps -l: 运行的主类全名或 jar 包名称
jps -m: 运行时传入主类的参数(args)
jps -v: 虚拟机参数
jstat(JVM statistics monitoring tool)
用于监视虚拟机各种运行状态信息的命令行工具. 它可以显示本地或者远程 [1] 虚拟机进程中的类装载, 内存, 垃圾收集, JIT 编译等运行数据
jstat -gcutil 进程号:
jstat -gcutil 时间间隔(ms) 监视次数:
查询结果表明: 这台服务器的新生代 Eden 区 (E, 表示 Eden) 使用了 58.56% 的空间, 两个 Survivor 区 (S0,S1, 表示 Survivor0,Survivor1) 分别是 100% 0%, 老年代 (O, 表示 Old) 和元空间 (metaspace)(jdk7 已经去除永久代) 则分别使用了 76.79% 和 93.35% 的空间, 压缩类空间 (CCS) 占 88.94%, 程序运行以来共发生 Minor GC(YGC, 表示 Young GC)536 次, 总耗时 4.614 秒, 发生 FullGC(FGC, 表示 Full GC)34 次, Full GC 总耗时 (FGCT, 表示 Full GC Time) 为 2.293 秒, 所有 GC 总耗时 (GCT, 表示 GC Time) 为 6.907 秒.
jinfo(configuration info for java)
作用是实时地查看和调整虚拟机各项参数. 使用 jps 命令的 - v 参数可以查看虚拟机启动时显式指定的参数列表, 但如果想知道未被显式指定的参数的系统默认值, 除了去找资料外, 就只能使用 jinfo 的 - flag 选项进行查询了.
jinfo -flag UseG1GC 12620:(查询是否使用 G1GC,+ 号表示使用,- 号表示不使用)
jmap(Memory Map for Java)
用于生成堆转储快照(一般称为 heapdump 或 dump 文件).
jmap 的作用并不仅仅是为了获取 dump 文件, 它还可以查询 finalize 执行队列, Java 堆和永久代的详细信息, 如空间使用率, 当前用的是哪种收集器等. 和 jinfo 命令一样, jmap 有不少功能在 Windows 平台下都是受限的, 除了生成 dump 文件的 - dump 选项和用于查看每个类的实例, 空间占用统计的 - histo 选项在所有操作系统都提供之外, 其余选项都只能在 Linux/Solaris 下使用.
jmap -dump:format=b,file=d:\a.bin 12620:
jmap -histo:live 12620: 显示堆中存活的内容
jhat(JVM Heap Analysis Tool)
与 jmap 搭配使用, 来分析 jmap 生成的堆转储快照.
先用 jmap dump 一个文件, 然后 jhat d:\a.bin:
然后输入 http://localhost:7000/ , 即可看到分析结果.
分析过程占用 CPU 和内存非常高.
jstack(Stack Trace for Java)
用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或者 javacore 文件). 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合, 生成线程快照的主要目的是定位线程出现长时间停顿的原因, 如线程间死锁, 死循环, 请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因. 线程出现停顿的时候通过 jstack 来查看各个线程的调用堆栈, 就可以知道没有响应的线程到底在后台做些什么事情, 或者等待着什么资源.
jstack -l: 除堆栈外, 显示关于锁的附加信息.
jstack -F 12620: 当正常输出的请求不被响应时, 强制输出线程堆栈
jstack -m 12620: 如果调用到本地方法的话, 可以显示 C/C++ 的堆栈
可视化工具 --jconsole
命令行输入 jconsole 即可, 可以内存监控, 线程监控, 检查死锁等.
来源: http://www.bubuko.com/infodetail-3360219.html