JPS
java process status
jps -l 查看包名+类名
jps -m 查看类和接收的参数
jps -v 查看类+虚拟机参数
jstat
类装载,内存 ,垃圾收集,jit编译的信息
命令格式:jstat [options] VMID [interval] [count]
[options] : 操作参数,一般使用 -gcutil 查看gc情况
VMID : 本地虚拟机进程ID,即当前运行的java进程号
[interval] : 连续输出的时间间隔,单位为秒或者毫秒
[count] : 连续输出的次数,如果缺省打印无数次
Option | Displays |
class | 类加载的行为统计。 |
compiler | HotSpt JIT编译器行为统计。 |
gc | 垃圾回收堆的行为统计。 |
gccapacity | 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。 |
gcutil | 垃圾回收统计概述(百分比)。 |
gccause | 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。 |
gcnew | 新生代行为统计。 |
gcnewcapacity | 新生代与其相应的内存空间的统计。 |
gcold | 年老代和永生代行为统计。 |
gcoldcapacity | 年老代行为统计。 |
gcpermcapacity | 永生代行为统计。 |
printcompilation | HotSpot编译方法统计。 |
元空间的本质和永久代类似,都是对JVM规范中方法区的实现。元空间和永久代最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。
jinfo
查看和调整虚拟机参数
如查看虚拟机是否使用G1垃圾收集器
+代表使用,-代表没使用
查看jvm的参数:jinfo -flags process_id
查看java系统参数:jinfo -sysprops process_id
如果需要关闭GC日志的打印,使用下面的命令:
jinfo -flag -PrintGC 27250
jinfo -flag -PrintGCDetails 27250
查看是否开启了GC日志的打印:
jinfo -flag PrintGC 27250
jinfo -flag PrintGCDetails 27250
jmap
JVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件。 jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。
命令格式
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
参数
option:选项参数,不可同时使用多个选项参数
pid:java进程id,命令ps -ef | grep java获取
executable:产生核心dump的java可执行文件
core:需要打印配置信息的核心文件
remote-hostname-or-ip:远程调试的主机名或ip
server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器
options参数
heap : 显示Java堆详细信息
histo : 显示堆中对象的统计信息
permstat :Java堆内存的永久保存区域的类加载器的统计信息
finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
dump : 生成堆转储快照
F : 当-dump没有响应时,强制生成dump快照
jhat
JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。
一般不用。
jstack
jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
jstack [ option ] pid
基本参数:
-F 当jstack [-l] pid没有响应的时候强制打印栈信息
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m 打印java和native c/c++框架的所有栈信息. -h | -help打印帮助信息
pid 需要被打印配置信息的java进程id,可以用jps工具查询. [1]
注意:
1、不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, dump信息也有差别。
2、在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。
jconsole
内存监控
线程监控
死锁
VisualVM
一款功能丰富的虚拟机性能监测工具