1 min to read
Java虚拟机常用的监控命令
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 |
-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
Comments