内存监控工具

内存监控工具

综述

JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具。
1,VisualVM的使用
在安装java文件的bin目录下有jvisualvm程序
在这里插入图片描述
在eclipse和tomcat启动的情况下,双击打开该程序得到如下界面
在这里插入图片描述
工具——插件——可用插件中选择Visual GC安装
在这里插入图片描述
双击打开eclipse可以查看堆中内存使用情况

2,jConsole使用
Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到。它用于连接正在运行的本地或者远程的JVM,对运行在java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界面。而且本身占用的服务器内存很小,甚至可以说几乎不消耗。
使用详情参见:https://www.cnblogs.com/baihuitestsoftware/articles/6405580.html

jps

1,概念
jps(Java Virtual Machine Process Status Tool)
是java提供的一个显示当前所有java进程pid的命令,它的作用是显示当前系统的java进程情况及进程id。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),并可通过opt来查看这些进程的详细启动参数。
2,语法:
jps [ options ] [ hostid ]
说明:
1)、options:命令选项,用来对输出格式进行控制,jps命令选项如下:

-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数

2)、hostid【n. 主机标识符(host identifier的缩写)】:指定监控主机,默认为当前主机;
查看主机标示符:开始——运行——cmd——ipconfig/all

在这里插入图片描述

jstack

1,概念
jstack用于显示指定进程内线程的信息
2,语法
jstack [option] < pid >
说明:
option:命令选项,常用选项如下:

-F  当’jstack [-l] pid’没有相应的时候强制打印栈信息,如果直接jstack无响应时,用于强制jstack),一般情况不需要使用
-l  长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表,会使得JVM停顿得长久得多(可能会差很多倍,比如普通的jstack可能几毫秒和一次GC没区别,加了-l 就是近一秒的时间),-l 建议不要用。一般情况不需要使用
-m  打印java和native c/c++框架的所有栈信息.可以打印JVM的堆栈,显示上Native的栈帧,一般应用排查不需要使用
pid:进程id

例子:
运行如下代码:

public class Test {
	
	public static void main(String[] args) {
		while(true) {
		}
	}
}

执行jps命令得到
在这里插入图片描述
执行jstack 11020命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

jmap

1,作用
监控内存内的Java对象
2,语法:
jmap [option]
说明:
option:命令选项,常用选项如下:

-heap 打印Java堆概要信息,包括使用的GC算法、堆配置参数和各代中堆内存使用情况;
-histo[:live] 打印Java堆中对象直方图,通过该图可以获取每个class的对象数目,占用内存大小和类全名信息,带上:live,则只统计活着的对象。
-permstat 打印永久代统计信息
-finalizerinfo 打印等待回收的对象信息,
-dump:<dump-options> 以hprof二进制格式将Java堆信息输出到文件内,该文件可以用MAT、VisualVM或jhat等工具查看;
	dump-options选项:
        live 只输出活着的对象;不指定,则输出堆中所有对象
        format=b 指定输出格式为二进制
        file=<file> 指定文件名及文件存储位置,例如:jmap -dump:live,format=b,file=D:\heap.bin <pid>
-F 与-dump:<dump-options> <pid>或-histo<pid>一起使用,当<pid>没有响应时,强制执行;注意:不支持live子选项
pid:进程id

3,命令的使用
在这里插入图片描述
在这里插入图片描述

Number of objects pending for finalization: 0 说明当前F-QUEUE队列中并没有等待Fializer线程执行finalizer方法的对象。

使用详情参见 https://www.cnblogs.com/xingzc/p/5778014.html

jhat

1,概念
jhat用于分析产生的堆文件,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。
2,使用
1)、导出堆文件:
在这里插入图片描述
在这里插入图片描述
2)、分析堆文件:输入如下命令

3),查看html:在浏览器中输入主机地址:端口号
在这里插入图片描述
说明:

All classes including platform 显示所有创建堆中对象的类
Show all members of the rootset 显示rootset能引用到的所有对象
Show instance counts for all classes (including platform) 显示所有类(包括JDK中定义的Java类)的实例数量
Show instance counts for all classes (excluding platform) 显示所有类(不包括JDK中定义的Java类)的实例数量
Show heap histogram 显示堆内对象直方图
Show finalizer summary 显示等待回收的对象信息
Execute Object Query Language (OQL) query 执行对象查询语句

jstat

Java Virtual Machine statistics monitoring tool
1,作用:
用于查看堆内存各部分的使用量及加载类的数量
2,语法:

jstat -<option> [-t] [-h<lines>] <vmid> [<interval[s|ms]> [<count>]]

说明:

option:命令选项,通过jstat -options可以查看jstat支持哪些命令选项
-t:timestamp简写,
-h<lines>:h是显示标题,lines代表一个整数,-h3表示每三行显示一次标题
vmid:VM进程号,即当前运行的Java进程号
interval:间隔多长时间统计一次,默认单位ms(毫秒),如果为s,则为秒
count:统计次数,如果省略,则统计无限次,但interval和count都省略,则只统计一次

3,使用
在这里插入图片描述
在这里插入图片描述

说明:
	Loaded 装载的类的数量 
	Bytes 装载类所占用的字节数 
	Unloaded 卸载类的数量 
	Bytes 卸载类的字节数 
	Time 装载和卸载类所花费的时间

在这里插入图片描述

说明:
	Compiled 编译任务执行数量 
	Failed 编译任务执行失败数量 
	Invalid 编译任务执行失效数量 
	Time 编译任务消耗时间 
	FailedType 最后一个编译失败任务的类型 
	FailedMethod 最后一个编译失败任务所在的类及方法

在这里插入图片描述

说明:
	S0C 年轻代中第一个存活区的大小(KB)
	S1C 年轻代中第二个存活区的大小(KB)
	S0U 年轻代中第一个存活区已使用的空间(KB) 
	S1U 年轻代中第二个存活区已使用的空间(KB) 
	EC Eden区大小
	EU 年轻代中Eden区已使用的空间 (KB) 
	OC 老年代大小
	OU 老年代已使用的空间 (KB)
	MC 元空间大小
	MU 元空间已使用的空间 (KB) 
	CCSC 压缩类空间大小
	CCSU 压缩类空间使用大小
	YGC 从应用程序启动到采样时young gc的次数
	YGCT 从应用程序启动到采样时young gc的所用的时间(s),如果young gc所用时间比较长,如超过几秒,则young gc不正常
	FGC 从应用程序启动到采样时full gc的次数
	FGCT 从应用程序启动到采样时full gc的所用的时间
	GCT 从应用程序启动到采样时整个gc所用的时间

在这里插入图片描述

说明:
	NGCMN 年轻代(young)中初始化(最小)的大小(KB) 
	NGCMX 年轻代(young)的最大容量 (KB) 
	NGC 年轻代(young)中当前的容量 (KB) 
	S0C 年轻代中第一个survivor(幸存区)的容量 (KB) 
	S1C 年轻代中第二个survivor(幸存区)的容量 (KB) 
	EC 年轻代中Eden(伊甸园)的容量 (KB) 
	OGCMN old代中初始化(最小)的大小 (KB) 
	OGCMX old代的最大容量(KB) 
	OGC old代当前新生成的容量 (KB) 
	OC Old代的容量 (KB)
	MCMN 元空间初始化(最小)的大小 (KB)
	MCMX 元空间最大容量 (KB)
	MC 元空间容量(KB)
	CCSMN 最小压缩类空间大小
	CCSMX 最大压缩类空间大小
	CCSC 当前压缩类空间大小
	YGC 从应用程序启动到采样时年轻代中gc次数 
	FGC 从应用程序启动到采样时old代(全gc)gc次数

在这里插入图片描述

说明:
	S0 Heap上的 Survivor space 0 区已使用空间的百分比    
	S1 Heap上的 Survivor space 1 区已使用空间的百分比    
	E Heap上的 Eden space 区已使用空间的百分比    
	O Heap上的 Old space 区已使用空间的百分比    
	M Meta space 区已使用空间的百分比 
	CCS
	YGC 从应用程序启动到采样时发生 Young GC 的次数 
	YGCT 从应用程序启动到采样时 Young GC 所用的时间(单位秒)    
	FGC 从应用程序启动到采样时发生 Full GC 的次数 
	FGCT 从应用程序启动到采样时 Full GC 所用的时间(单位秒)     
	GCT 从应用程序启动到采样时用于垃圾回收的总时间(单位秒) 
	LGCC 
	GCC 

在这里插入图片描述

说明:
	MCMN 元数据初始化(最小)的大小 (KB)
	MCMX 元数据初始化(最大)的大小 (KB)
	MC 元数据使用大小 (KB)
	CCSMN 最小压缩类空间大小
	CCSMX 最大压缩类空间大小
	CCSC 当前压缩类空间大小
	YGC 从应用程序启动到采样时年轻代中gc次数
	FGC 从应用程序启动到采样时old代(全gc)gc次数 
	FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
	GCT 从应用程序启动到采样时gc用的总时间(s)

在这里插入图片描述

说明:
	S0C 年轻代中第一个survivor(幸存区)的容量 (KB) 
	S1C 年轻代中第二个survivor(幸存区)的容量 (KB)
	S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (KB) 
	S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (KB) 
	TT 持有次数限制 MTT 最大持有次数限制
	MTT 对象在新生代存活的最大次数
	DSS 期望的幸存区大小
	EC 年轻代中Eden(伊甸园)的容量 (KB) 
	EU 年轻代中Eden(伊甸园)目前已使用空间 (KB) 
	YGC 从应用程序启动到采样时年轻代中gc次数 
	YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

在这里插入图片描述

说明:
	NGCMN 年轻代(young)中初始化(最小)的大小(KB) 
	NGCMX 年轻代(young)的最大容量 (KB) 
	NGC 年轻代(young)中当前的容量 (KB) 
	S0CMX 年轻代中第一个survivor(幸存区)的最大容量 (KB) 
	S0C 年轻代中第一个survivor(幸存区)的容量 (KB) 
	S1CMX 年轻代中第二个survivor(幸存区)的最大容量 (KB) 
	S1C 年轻代中第二个survivor(幸存区)的容量 (KB) 
	ECMX 年轻代中Eden(伊甸园)的最大容量 (KB) 
	EC 年轻代中Eden(伊甸园)的容量 (KB) 
	YGC 从应用程序启动到采样时年轻代中gc次数 
	FGC 从应用程序启动到采样时old代(全gc)gc次数

在这里插入图片描述

说明:
	MC 元空间的容量 (KB) 
	MU 元空间目前已使用空间 (KB)
	CCSC 压缩类空间大小
	CCSU 压缩类空间使用大小
	OC Old代的容量 (KB) 
	OU Old代目前已使用空间 (KB) 
	YGC 从应用程序启动到采样时年轻代中gc次数 
	FGC 从应用程序启动到采样时old代(全gc)gc次数 
	FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s) 
	GCT从应用程序启动到采样时gc用的总时间(s)

在这里插入图片描述

说明:
	OGCMN old代中初始化(最小)的大小 (KB) 
	OGCMX old代的最大容量(KB)
	OGC old代当前新生成的容量 (KB) 
	OC Old代的容量 (KB) 
	YGC 从应用程序启动到采样时年轻代中gc次数 
	FGC 从应用程序启动到采样时old代(全gc)gc次数 
	FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
	GCT 从应用程序启动到采样时gc用的总时间(s)

在这里插入图片描述

说明:
	S0 Heap上的 Survivor space 0 区已使用空间的百分比
	S1 Heap上的 Survivor space 1 区已使用空间的百分比
	E Heap上的 Eden space 区已使用空间的百分比
	O Heap上的 Old space 区已使用空间的百分比
	M Meta space 区已使用空间的百分比
	CCS 压缩使用比例
	YGC 从应用程序启动到采样时发生 Young GC 的次数
	YGCT 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
	FGC  从应用程序启动到采样时发生 Full GC 的次数
	FGCT 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
	GCT 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),GCT 是YGCT 和FGCT的时间总和。

在这里插入图片描述

说明:
	Compiled 编译任务的数目
	Size 方法生成的字节码的大小 
	Type 编译类型 
	Method 类名和方法名用来标识编译的方法。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值