Java 自带的命令行工具
# 1. 编译class
javac -encoding UTF-8 [-d .] Test1.java
# 2. 运行
java com.blog.Test1
# 3. 查看字节码
javap -verbose Test1.class
// -verbose 指定显示更进一步的详细信息
// -c 分解方法代码,即显示每个方法具体的字节码
# 查看堆内存占用情况
jmap -heap [pid]
# 图形界面多功能监测工具, 可以连续监测
jconsole
# 可视化工具(安装 Visual GC 插件)(堆Dump)
jvisualvm
# 查看运行的java进程及 pid
jps
# 查看当前的堆内存
jmap -dump:fromat=b,live,file=1.bin 21384
## b 二进制文件类型
## live 活着的, 会主动进行一次垃圾回收
## file 文件名
# 排查栈上问题
top # 记下 pid
ps H -eo pid,tid,%cpu |grep [pid] # H 打印进程树 -eo 感兴趣的内容 或 top Hp [pid]
jstack [pid]
# 然后将上面 ps 找到的 tid (thread id) 换算为16进制(原来为10进制), 在打印的信息中找到对应的 nid (Native Thread ID).
查看内存
对 Java 程序的资源和性能进行实时监控,包括了对Heap size 和 垃圾回收状况 的监控
- Jstat 可以用来监视 VM 内存内的堆和其他部分的大小 (XXC) 及内存使用量 (XXU)
# -v 显示虚拟机参数
jps -v
# 加载 class 的数量, 及所占空间
jstat -class pid
# 显示VM实时编译的数量
jstat -compiler pid
# -gc 显示gc信息,查看gc的次数,及时间
jstat -gc 7672
| 字段名 | 说明 |
|---|
| S0C | 第一个Survivor的容量(kB) |
| S1C | 第二个Survivor的容量(kB) |
| S0U | 第一个Survivor已使用的容量(kB) |
| S1U | 第二个Survivor已使用的容量(kB) |
| EC | Eden区的容量(kB) |
| EU | Eden区已使用的容量(kB) |
| OC | 老年代的容量(kB) |
| OU | 老年代已使用的容量(kB) |
| MC | 元空间的容量(kB) |
| MU | 元空间已使用的容量(kB) |
| CCSC | 压缩类的容量(kB) |
| CCSU | 压缩类已使用的的容量(kB) |
| YGC | 年轻代垃圾收集的次数 |
| YGCT | 年轻代垃圾回收消耗时间 |
| FGC | 老年代垃圾回收次数 |
| FGCT | 老年代垃圾回收消耗时间 |
| GCT | 垃圾回收消耗总时间 |