内存管理机制-性能监控与故障处理工具
2017-06-06 00:00
477 查看
性能监控与调优的工具主要分为 命令行工具和图形化界面工具
这些工具体积小的主要原因并非是 JDK开发团队刻意精炼所致,而是这些工具本身是对 tools.jar类库的一层简单包装,工具主要功能的实现代码都在tools.jar中。如果是Linux版本的JDK,这些工具甚至是有shell编写而成。
需要注意的是,有些工具是基于JMX工作的,在JDK1.5和以前的版本需要添加参数 -Dcom.sun.management.jmxremote 开启JMX管理功能。而在JDK1.6之后的版本中,JMX是默认开启的,无需添加参数
虚拟机进程状态工具
jps的功能和ps命令类似,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类的名称,以及这些进程的本地虚拟机的唯一ID(LVMID, Local Virtual Machine Identifier),对于本地虚拟机进程来说,LVMID与炒作系统的进程ID(PID, Process Identifier)是一致的,如果同时启动了多个虚拟机进程,难以靠PID来定位,多数通过jps 命令显示主类来加以区分。
* jps 命令格式: *
虚拟机统计信息监视工具
jstat是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机进程中的类装载,内存,垃圾收集,JIT编译等运行时数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。
* jstat 命令格式: *
统计的参数详解
Java配置信息工具
jinfo的作用是实时地查看和调整虚拟机的各项参数。
这个命令原先只在Linux上提供,在JDK1.6之后 windows平台上也有了,但是在windows平台上jinfo命令有较大的限制只提供最基本的 -flag 选项
* jinfo 命令格式: *
Java 内存映像工具
jmap命令用于生成堆快照(heapdump或dump文件)。不仅如此,jmap还可以查询finalize执行队列 堆和永久代的详细信息。
和jinfo一样,jmap很多功能在windows平台上受限制
* jmap 命令格式: *
虚拟机堆转储快照分析工具
jhap与jmap搭配使用用来分析 jmap生成的快照文件。jhap内置一个微型的HTTP/HTML服务器
生成dump文件分析结果后,可以在浏览器中查看
Java 堆栈跟踪工具
jstack的功能用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。
线程快照就是当前虚拟机内每一条线程正在执行方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程死锁,死循环,请求外部资源等。
* jstack 命令格式: *
Jconsole 是一款基于JMX的可视化监视和管理工具。部分功能针对于JMX MBean进行管理。
JConsole 位于 bin/jConsole.exe
JConsole 其实 是 命令行工具的一种整合,里面的标签页对应的是JDK的命令行工具 如 Memory标签页: 相当于 jstat命令
多合一故障处理工具
随着JDK发布的功能最强大的运行监视和故障处理程序。从JDK1.6 update 7开始 已经作为官方故障处理工具加入到 bin\jvisualvm.exe
VisualVM 是基于NetBeans 平台发开的,因此它一开始就具备了插件扩展功能的特性
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 InfoJava配置信息工具
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 MapJava 内存映像工具
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 TraceJava 堆栈跟踪工具
jstack的功能用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。
线程快照就是当前虚拟机内每一条线程正在执行方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程死锁,死循环,请求外部资源等。
* jstack 命令格式: *
jstack [option] vmid
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-m | 如果调用到本地方法,可以显示C/C++的堆栈 |
-l | 除堆栈外,显示关于锁的附加信息 |
2. 图形化界面工具
2.1 JConsole
Java Monitoring and Management ConsoleJconsole 是一款基于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 平台发开的,因此它一开始就具备了插件扩展功能的特性
相关文章推荐
- JAVA内存系列五之JVM性能监控与故障处理工具
- 第3章-垃圾收集器与内存分配策略 第4章-虚拟机性能监控与故障处理工具
- JVM性能监控与故障处理工具 5/3/2016
- 深入理解Java虚拟机----(四)性能监控与故障处理工具
- 深入理解Java虚拟机-虚拟机性能监控与故障处理工具
- JVM性能监控及故障处理工具
- 虚拟机性能监控与故障处理工具
- Java虚拟机8:虚拟机性能监控与故障处理工具
- 虚拟机性能监控与故障处理工具
- JVM性能监控与故障处理工具
- JVM之性能监控与故障处理工具
- 第二篇 虚拟机性能监控与故障处理工具(JDK的命令行工具/JDK的可视化工具)
- 3.虚拟机性能监控和故障处理工具
- Java JVM 读书笔记 - 虚拟机性能监控和故障处理工具
- java虚拟机性能监控与故障处理工具
- java jvm 性能监控和故障处理工具
- 《深入理解Java虚拟机》笔记--第四章、虚拟机性能监控与故障处理工具
- JAVA虚拟机性能监控和故障处理工具
- JAVA虚拟机之六:虚拟机性能监控和故障处理工具
- Java虚拟机深入学习之四: Java虚拟机的性能监控和故障处理工具