您的位置:首页 > 运维架构

内存管理机制-性能监控与故障处理工具

2017-06-06 00:00 477 查看
性能监控与调优的工具主要分为 命令行工具和图形化界面工具

RoadMap



1. 命令行工具

JDK中的bin目录下“赠送”了很多体积小(几十KB) 且功能强大的虚拟机监控和故障处理工具。
这些工具体积小的主要原因并非是 JDK开发团队刻意精炼所致,而是这些工具本身是对 tools.jar类库的一层简单包装,工具主要功能的实现代码都在tools.jar中。如果是Linux版本的JDK,这些工具甚至是有shell编写而成。

需要注意的是,有些工具是基于JMX工作的,在JDK1.5和以前的版本需要添加参数 -Dcom.sun.management.jmxremote 开启JMX管理功能。而在JDK1.6之后的版本中,JMX是默认开启的,无需添加参数

1.1 jps

JVM Process Status Tool
虚拟机进程状态工具
jps的功能和ps命令类似,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类的名称,以及这些进程的本地虚拟机的唯一ID(LVMID, Local Virtual Machine Identifier),对于本地虚拟机进程来说,LVMID与炒作系统的进程ID(PID, Process Identifier)是一致的,如果同时启动了多个虚拟机进程,难以靠PID来定位,多数通过jps 命令显示主类来加以区分。

* jps 命令格式: *

jps [options] [hostid] hostid 为 RMI 注册表中的 主机名 默认为 localhost


选项作用
-q只输出LVMID, 省略主类的名称
-m输出虚拟机进程启动时传递给主类main()函数的参数
-l输出主类的全名,如果进程执行的是Jar包,输出Jar路劲
-v输出虚拟机启动时 JVM参数


1.2 jstat

JVM statistics Monitoring Tool
虚拟机统计信息监视工具
jstat是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机进程中的类装载,内存,垃圾收集,JIT编译等运行时数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。

* jstat 命令格式: *

jstat [ option vmid [intervals[s|m] [count]] ]


如果是本地虚拟机 vmid 则与LVMID是一致的


如果是远程虚拟机 那vmid的格式应该为 [protocol:]//LVMID[@hostname[:port]/servername]


eg:   interval 和 count代表查询间隔和次数,如果省略这两个参数,说明只查一次。


选项作用
-class监视类装载,卸载数量,总空间及类装载所耗费的时间
-gc监视java堆状况,包括Eden区,2个survivor区,老年代,永久代等容量,已用空间,GC时间合计等信息
-gccapacity监视内容与-gc基本相同,主要关注Java堆各个区域使用到的最大和最小空间
-gcutil监视内容与-gc基本相同,主要关注已使用空间占总空间的百分比
-gccause与-gcutil功能一样,会额外输出导致上一次GC产生的原因
-gcnew监视新生代GC的状况
-gcnewcapacity监视内容与-gcnew基本相同,主要用到的最大和最小空间
-gcold监视老年代GC的状况
-gcoldcapacity监视内容与-gcold基本相同,主要用到的最大和最小空间
-gcpermcapacity输出永久代使用到的最大和最小空间
-compiler输出JIT编译器编译过的方法,耗时等信息
-printcompilation输出已经被JIT编译的方法


统计的参数详解

S0C — Heap上的 Survivor space 0 区总量


S1C — Heap上的 Survivor space 1 区总量


S0U — Heap上的 Survivor space 0 区已使用的百分比


S1U — Heap上的 Survivor space 1 区已使用的百分比


EC — Heap上的 Eden space 区总量


EU — Heap上的 Eden space 区已使用空间的百分比


OC — Heap上的 Old space 区总量


OU — Heap上的 Old space 区已使用空间的百分比


PC — Perm space 区总量


PU — Perm space 区已使用空间的百分比


YGC — 从应用程序启动到采样时发生 Young GC 的次数


YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)


FGC — 从应用程序启动到采样时发生 Full GC 的次数


FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)


GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)


1.3 jinfo

Java Configuration Info
Java配置信息工具
jinfo的作用是实时地查看和调整虚拟机的各项参数。
这个命令原先只在Linux上提供,在JDK1.6之后 windows平台上也有了,但是在windows平台上jinfo命令有较大的限制只提供最基本的 -flag 选项

* jinfo 命令格式: *

jinfo [option] pid


选项作用
-sysprops输出System.getProperties()内容
-flag name打印指定参数值
-flag [+-]name 或者 -flag name=value


1.4 jmap

Java Memory Map
Java 内存映像工具
jmap命令用于生成堆快照(heapdump或dump文件)。不仅如此,jmap还可以查询finalize执行队列 堆和永久代的详细信息。
和jinfo一样,jmap很多功能在windows平台上受限制

* jmap 命令格式: *

jmap [option] vmid


选项作用
-dump生成java堆转出快照。格式为:
-dump:format=b,file=<filename>
-histo显示堆中对象的统计信息,包括类,实例数量和合计容量
-finalizerinfo显示在F-Queue中等待Finalizer线程执行finalize方法的对象,只在Linux/Solaris平台下有效
-heap显示java堆详细信息
-permstat以ClassLoader为统计口径显示永久代内存状态,只在Linux/Solaris平台下有效
-F当-dump选项没有响应时,强制生成dump快照,只在Linux/Solaris平台下有效




1.5 jhat

Java Heap Analysis Tool
虚拟机堆转储快照分析工具
jhap与jmap搭配使用用来分析 jmap生成的快照文件。jhap内置一个微型的HTTP/HTML服务器
生成dump文件分析结果后,可以在浏览器中查看
http://localhost:7000






1.6 jstack

JVM Strack Trace
Java 堆栈跟踪工具
jstack的功能用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。
线程快照就是当前虚拟机内每一条线程正在执行方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程死锁,死循环,请求外部资源等。

* jstack 命令格式: *

jstack [option] vmid


选项作用
-F当正常输出的请求不被响应时,强制输出线程堆栈
-m如果调用到本地方法,可以显示C/C++的堆栈
-l除堆栈外,显示关于锁的附加信息


2. 图形化界面工具

2.1 JConsole

Java Monitoring and Management Console
Jconsole 是一款基于JMX的可视化监视和管理工具。部分功能针对于JMX MBean进行管理。
JConsole 位于 bin/jConsole.exe

JConsole 其实 是 命令行工具的一种整合,里面的标签页对应的是JDK的命令行工具 如 Memory标签页: 相当于 jstat命令





2.2 VisutalVM

All-in-One Java Troubleshooting Tool
多合一故障处理工具
随着JDK发布的功能最强大的运行监视和故障处理程序。从JDK1.6 update 7开始 已经作为官方故障处理工具加入到 bin\jvisualvm.exe



VisualVM 是基于NetBeans 平台发开的,因此它一开始就具备了插件扩展功能的特性

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: