JVM命令
Java虚拟机(JVM)是Java程序运行的基础设施,它负责将Java字节码转换为本地机器代码并执行。在开发过程中,我们经常需要使用一些命令来监控和管理JVM的性能和状态。六个常用的JVM命令:jps、jstat、jmap、jhat、jstack、jinfo。
jps
jps 命令用于列出当前系统中所有正在运行的Java进程及其主类名。它可以帮助我们快速找到我们需要调试或监控的Java进程。
格式
jps [options] [hostid]
option参数说明:
- l : 输出主类全名或jar路径。
- q : 只输出LVMID。
- m : 输出JVM启动时传递给main()的参数。
- v : 输出JVM启动时显示指定的JVM参数。
jstat
jstat 命令用于收集和报告关于Java虚拟机(JVM)的各种统计信息。这些信息可以帮助我们了解JVM的性能状况,例如垃圾回收情况、内存使用情况等。
格式
jstat 【options】 <PID> 【interval】 【count】
命令参数说明:
- Options,一般使用gcutil 或 -gc 查看gc 情况pid。
- pid,当前运行的 java进程号。
- interval,间隔时间,单位为秒或者毫秒 。
- count,打印次数,如果缺省则打印无数次。
options参数说明:
- gc:统计 jdk gc时 heap信息,以使用空间字节数表示。
- gcutil:统计 gc时, heap情况,以使用空间的百分比表示。
- class:统计 class loader行为信息。
- compile:统计编译行为信息。
- gccapacity:统计不同 generations(新生代,老年代,持久代)的 heap容量情况。
- gccause:统计引起 gc的事件。
- gcnew:统计 gc时,新生代的情况。
- gcnewcapacity:统计 gc时,新生代 heap容量。
- gcold:统计 gc时,老年代的情况。
- gcoldcapacity:统计 gc时,老年代 heap容量。
- gcpermcapacity:统计 gc时, permanent区 heap容量。
jmap
jmap命令用于生成Java堆内存快照文件(heap dump)。这些文件可以用于分析内存泄漏问题,或者进行性能调优。
格式
jmap 【options】 <pid>
options参数说明 :
- no options 如果使用不带选项参数的jmap打印共享对象映射, 将会打印目标虚拟机中加载的每个对象的起始地址、映射大小及共享对象文件的路径全称。(很占资源, 一般不会使用)。
- heap:打印java heap 摘要。
- histo[:live] :打印堆中的java对象统计信息。
- clstats :打印类加载器统计信息。
- finalizerinfo:打印在f-queue中等待执行finalizer方法的对象。
- dump:生成java堆的dump文件, dump-options:
- live :只转储存活的对象,如果没有指定则转储所有对象。
- format=b:二进制格式。
- file=[Path] :将文件转储到指定文件中。
jhat
jhat 用来分析jmap生成dump文件的命令, jhat内置了应用服务器,可以通过网页查看dump文件分析结果,jhat一般用于离线分析。
格式
jhap 【options】 【dumpfile】
option参数说明:
- stack false :关闭对象分配调用堆栈的跟踪。
- refs false:关闭对象引用的跟踪。
- port:HTTP服务器端口, 默认是7000。
- debug:debug级别。
- version:分析报告版本。
jstack
jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
格式
jstack 【options】 【pid】
options参数说明:
- F :当使用jstack无响应时,强制输出线程堆栈。
- m:同时输出java堆栈和c/c++ 堆栈信息。
- l :除了输出堆栈信息外, 显示关于锁的附加信息。
jinfo
jinfo命令用于显示Java虚拟机(JVM)的配置信息,包括系统属性、Java版本、可用的JVM选项等。这可以帮助我们了解JVM的配置和使用情况。
格式
jinfo 【options】 <pid>
options参数说明:
- no options :输出所有的系统属性和参数。
- flag :打印指定名称的参数。
- flag [+|-] :打开或关闭参数。
- flag = 设置参数值。
- flags 打印所有参数。
- sysprops 打印系统配置。