内存监控工具(上)

概述JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVMjConsole外,还有jpsjstackjmapjhatjstat等小巧的工具,接下来逐一对各种工具作一介绍:

1.jps

这个名字是Java Virtual Machine Process Status Tool的缩写

作用:用于输出jvm内存状态信息

语法:

jps [options] [hostid]

    说明:

①、options:命令选项,用来对输出格式进行控制,jps命令选项如下:

 -q 不输出类名、Jar名和传入main方法的参数

使用示例:

-m 输出传入main方法的参数

示例:

-l 输出main类或Jar的全限名

示例:

 

-v 输出传入JVM的参数

示例:

 

hostid:指定监控主机,默认为当前主机;

2.jmap

作用:监控内存内的Java对象

语法:

 

jmap [option] <pid>

说明:pid 为 进程的id 数字为第一个示例中的模式

此时我的电脑中有这些进程:

我随意挑选一个进程进行示例

option:命令选项,常用选项如下:

①.-heap 印Java堆概要信息,包括使用的GC算法、堆配置参数和各代中堆内存使用情况;

②.-histo[:live] 打印Java堆中对象直方图,通过该图可以获取每个class的对象数目,占用内存大小和类全名信息,带上:live,则只统计活着的对象:

输入格式为 jmap -histo:live 27792(统计活着的对象)

jmap -histo 27792 (获取所有对象)

我的输出格式是这样的 这个里面活着的对象有点多所以无法全部截图(这时我执行的是jmap -histo:live 27792

 

标准输出范例:

   class name列出现了[C[B[L等很奇怪的内容,这些属于非自定义类,具体为:

BaseType Character

Type

Interpretation

B

byte

signed byte

C

char

Unicode character

D

double

double-precision floating-point value

F

float

single-precision floating-point value

I

int

integer

J

long

long integer

L;

reference

an instance of class

S

short

signed short

Z

boolean

true or false

[

reference

one array dimension

             

             

             

                    

                    

           

 

      

③.-finalizerinfo 打印等待回收的对象信息

如下命令:jmap -finalizerinfo 27792

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

④. -dump:<dump-options> hprof二进制格式将Java堆信息输出到文件内,该文件可以用MATVisualVMjhat等工具查看;

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子选项

输出的文件是这样的:

输入如下:jmap -dump:live,format=b,file=D:\heap.bin 27792

3.jhat 作用:用于分析产生的堆文件,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。

使用过程:

①.导出堆文件

输入如右:jmap -dump:live,file=D:\heap.log pid 27792

②.分析堆文件

输入格式:jhat -J-Xmx512m <heap dump file> 解析Java堆转储文件,并启动一个 web server

说明:有时dump出来的堆文件很大,在启动时报堆空间不足的错误,可添加-J-Xmx512M参数;

如下输入:jhat -J-Xmx512M D:\heap.log

输出这样的结果

我们可以看到下方有一个端口号:7000

也就是说 我们可以通过访问-----127.0.0.1:7000 来查看解析后的堆文件(格式为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 执行对象查询语句

猜你喜欢

转载自blog.csdn.net/qq_41313587/article/details/96725135
今日推荐