JDK 自带了很多常用工具方面我们进行一些性能监控与调试
在Windows工具都在我们JDK的bin目标下,Linux依旧有相关的命令
JVM工具可按照使用形式进行分类
- 命令行工具
- jps
- jstat
- jinfo
- 可视化工具
命令行工具
jps:JVM Process Status Tool 列出正在运行的虚拟机进程
jps [options] [hostid]
[options]:
-q:显示进程ID
-m:显示进程ID、主类名称、传入Main方法的命令行参数
-l:显示进程ID、主类全限定名(快速得知是什么项目)
-v:显示进程ID、主类名称、JVM参数
-V:显示进程ID、主类名称 (-V 等价于 默认不加options 的 jps)
options之间可以任意组合
[hostid]
hostname:port 例如:127.0.0.1:8080
jstat:JVM Statistics Monitoring Tool 监视虚拟机各种的运行状态信息( 类装载、内存、垃圾手机、JIT编译等)
jstat [options] [vmid] [interval] [count]
[options] 可以通过jstat -options 查看所有的options
-class:显示类加载的统计信息
-compiler:Java HotSpot VM 及时编译器统计信息
-gc:显示有关垃圾收集堆行为的统计信息
-gcutil:显示有关垃圾收集堆行为的统计信息的百分比
....
-class
[vmid]
虚拟机进程ID (可通过jps -l获得) 如果远程的虚拟机就需要 进程ID@IP:端口
[interval](可不穿,但是如果传递了count,建议传递采样间隔!)
采样间隔(默认单位是毫秒),单位可选秒或者毫秒(需要手动添加单位 如 30s就是30秒,300ms就是300毫秒)
[count](可不穿)
采样一共循环的次数
jstat 查看堆内存 实验案例
其他方式:https://www.zanglikun.com/481.html#Heap_Memory
//-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc
public static void main(String[] args) throws IOException {
final int OneMB = 1024*1024;
Byte[] b1 = new Byte[2*OneMB];
System.out.println("JVM 已经使用2M 回车执行下一步");
System.in.read();
Byte[] b2= new Byte[2*OneMB];
System.out.println("JVM 已经使用4M 回车继续执行下一步");
System.in.read();
Byte[] b3= new Byte[2*OneMB];
System.out.println("JVM 已经使用6M 再次回车结束");
System.in.read();
}
下面是运行结果:
jstat -gc PID
# 查看GC使用百分比
jstat -gcutil PID
我们从图中可以清晰看出来,在b3 数组 new 出来之前,内存已经不容许new 出来之后的,所以 JVM 执行了一次GC。
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤