1、javap
使用 javap 可以查看 Java 字节码反编译的源文件
示例:
public class Test{
public static void main(String []args) {
System.out.println("Hello World");
}
}
javap -c Test.class
public class Test{
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello World
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
2、jps
jps查询当前所有java进程
3、jstat
jstat 主要用于监控JVM信息状态,主要是 GC 信息
jstat -gc 11600 来查看该进程的 GC 信息
参数含义
- S0C 表示当前 Survivor0 的容量,S1C 表示当前 Survivor1 的容量
- S0U 表示当前 Survivor0 的利用率,S1U 表示当前 Survivor1 的利用率
- EC 表示 Eden 的容量,EU 表示 Eden 的利用率
- OC 表示老年代的容量,OU 表示老年代的利用率
- MC 表示 Metaspace 的容量,MU 表示 Metaspace 的利用率
- CCSC 表示类指针压缩空间容量,CCSU 表示使用的类指针压缩空间
- YGC 表示新生代 GC 的次数,YGCT 表示新生代 GC 的时间
- FGC 表示 Full Gc 的次数,FGCT 表示 Full GC 的时间
- GCT 表示 GC 总时间。
每个对象都有一个指向它自身类的指针,_klass: 指向类的 4 字节指针,64 位平台上 _klass: 指向类的 8 字节的指针,为了节约这些空间,引入了类指针压缩空间。
3、jcmd
jcmd 可以查看 JVM 信息
jcmd pit Thread.print -l 打印指定java进程在jvm中的所有线程栈
jcmd 11600 GC.heap_dump ./dump.hprof 指定目录文件生成当前java进程的 堆内存dump,map映射信息
更多命令 通过jcmd pid help 查看
4、jmap
jmap 打印出 Java 进程内存中 Object 的情况
jmap 一般是用来导出 内存dump的,命令参考 Example: jmap -dump:live,format=b,file=heap.bin
实际上新版的输入是这样的
[root@admin ~]# jmap --help
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a core file)
jmap [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
where <option> is one of:
<none> to print same info as Solaris pmap
-heap to print java heap summary
-histo[:live] to print histogram of java object heap; if the "live"
suboption is specified, only count live objects
-clstats to print class loader statistics
-finalizerinfo to print information on objects awaiting finalization
-dump:<dump-options> to dump java heap in hprof binary format
dump-options:
live dump only live objects; if not specified,
all objects in the heap are dumped.
format=b binary format
file=<file> dump heap to <file>
Example: jmap -dump:live,format=b,file=heap.bin <pid>
-F force. Use with -dump:<dump-options> <pid> or -histo
to force a heap dump or histogram when <pid> does not
respond. The "live" suboption is not supported
in this mode.
-h | -help to print this help message
-J<flag> to pass <flag> directly to the runtime system
常用的 options 参数:
- heap 显示 Java 堆详细信息
- histo 显示堆中对象的统计信息
- permstat 显示堆永久区的类加载器的统计信息
- finalizerinfo 显示在 F-Queue 队列等待 Finalizer 线程执行 finalize 方法的对象
- dump 生成堆转储快照
5、jhat
jhat 分析 Java 堆的命令,可以将堆中对象以 html 的形式显示出来
没怎么用过
6、jstack
jstack 是堆栈跟踪工具,主要用于打印给定进程 pid 的堆栈信息,一般在发生死锁或者 CPU 100% 的时候排查问题使用,可以去查询当前运行的线程以及线程的堆栈信息是什么情况
将指定java进程在jvm中的线程栈 全部打印,追加到文件中