Java虚拟机常用的监控命令

Featured image

jps

java process status,查看java进程的一些基本信息,进程Id,Main方法所在的类,Main方法的参数,虚拟机的参数等。附加选项 -mlvV

选项 含义
不加选项 输出java进程pid和主类名
-v 输出启动时配置的一些虚拟机的参数(有些默认参数不会被显示,可使用“jcmd pid VM.flags”这个命令查看)
-V 输出通过flag文件传递到JVM中的参数(实测好像没有发现效果,应该跟当时监控的进程有关)
-l 输出完全的主类名,或者jar包
-m 输出启动时,传入main方法的参数

jmap

查看堆的配置以及堆内存的使用情况
新版的Linux系统加入了 ptrace-scope 机制. 这种机制为了防止用户访问当前正在运行的进程的内存和状态;
临时解决方案:使用root用户,执行 echo 0 > /proc/sys/kernel/yama/ptrace_scope
永久解决方案:sudo vim /etc/sysctl.d/10-ptrace.conf 修改kernel.yama.ptrace_scope=0

选项 含义
-heap pid GC回收器类型,堆的配置,堆使用情况,String对象的个数及空间使用情况等
-histo pid 每个类对应的实例个数及占用空间的大小
-histo:live pid 只统计活的对象,并返回相应信息
-dump:live,format=b,file=./dump.bin pid 生成可用mat分析内存的文件
-finalizerinfo pid 打印等待被回收的对象信息
-clstats pid 打印类加载器相关信息
-F 当进程无响应时,加上这个选项,强制dump相关bin文件,但此时live参数将不起作用

jstack

查看虚拟机的线程快照,实际上就是每个线程的栈信息,当前状态,锁信息等
主要用于分析线程耗时的原因,检测死锁。也可以用于分析java程序崩溃时生成的core文件
nid 是以十六进制表示线程id

选项 含义
-F to force a thread dump. Use when jstack does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l 输出关于锁的信息
[ option ] executable core 分析java崩溃时生成的core文件

javap

JDK自带的反汇编器,可以查看class文件的字节码;
常用命令:javap -c xxx.class

async-profiler

https://github.com/jvm-profiling-tools/async-profiler