JVM性能调优监控工具

原创转载请注明出处:http://agilestyle.iteye.com/blog/2371409

jps

jsp命令用来输出JVM虚拟机进程的一些信息,可以列出虚拟机当前正在执行的进程,并显示其主类(即main函数所在的class)和进程的ID。jps可以方便地找到进程主类对应的进程ID

jstat

jstat是一个可以用来对虚拟机各种运行状态进行监控的工具,通过它可以查看到虚拟机的类加载与卸载情况,管理内存使用和垃圾收集等信息,监视JIT即时编译器的运行情况等,几乎囊括了JVM运行的方方面面。在很多由于权限或者其他原因而无法使用图形化工具的情况下,JVM自带的jstat工具成为了运行期定位问题的首选。

jinfo

jinfo命令主要用于查看应用程序的配置参数,以及打印运行JVM时候所指定的JVM参数。jinfo可以使用-sysprops选项将虚拟机进程中所指定的System.getProperties()的内容打印出来,并且该命令还可以查看未被显示指定的JVM参数的系统默认值,这通过jps -v是无法看到的。同时jinfo命令还能够在运行期修改JVM参数,通过使用 -flag name=value 或者 -flag [+|-]name 来修改一部分运行期可修改的虚拟机参数

jstack

jstack命令用来生成虚拟机当前的线程快照信息,线程快照就是当前虚拟机每一个线程正在执行的方法堆栈的集合。生成线程快照的目的主要是为了定位线程长时间没有响应的原因,如线程死锁、网络请求没有设置超市时间而长时间没有返回,死循环、信号量没有释放等,都有可能导致线程长时间停顿。这时如果能够 dump 出当前JVM虚拟机的线程快照,就能够看出没有响应的线程究竟在做什么事情,从而定位问题。

jmap

jmap可以用来查看等待回收对象的队列,查看堆的概要信息,包括采用的是哪种GC收集器,堆空间的使用情况,以及通过JVM参数指定的各个内存空间的大小等。并且jmap还有一个十分强大的功能,便是可以生成JVM堆的转储快照。通过相关工具对堆转储快照进行分析,能够看到内存中究竟有哪些对象,以及这些对象分别所占用的空间,以便找到诸如内存泄漏等问题的罪魁祸首。

有一点需要注意的是,jmap执行堆dump操作是,由于生成的转储文件较大,将耗费大量的系统资源。因此,应避免在系统高位运行时执行该指令,否则有可能造成短时间内系统无法响应的情况出现。

note:

通过在JVM启动时指定-XX:+HeapDumpOnOutOfMemoryError参数,可以在JVM翻身OOM的情况下生成堆转储快照,以便排查导致OOM的原因。

BTrace

BTrace是一个开源的Java程序动态跟踪工具,它工作的基本原理是通过Hotspot虚拟机的HotSwap技术将跟踪的代码动态替换到被跟踪的Java程序内,以观察程序运行的细节。通过BTrace可以在不修改代码、不重启应用的情况下,动态地查看程序运行细节,方便地对程序进行调试。

JConsole

JConsole是一款JDK内置的图形化性能分析工具,它可以用来连接本地或者远程正在运行的JVM,对运行的Java应用程序的性能及资源消耗情况进行分析和监控,并提供可视化的图表对相关数据进行展现。通过运行bin目录下的JConsole命令,它将自动搜索出本机所有的Java进程,选中其中一个进程双击即可以开始监控,也可以使用远程连接功能,对远端的JVM进程进行监控。

JVisualVM

JVisualVM是一款功能十分强大的“All-in-One”,涵盖了JVM内存消耗监视、性能分析、线程,以及堆转储分析、垃圾回收监视等几乎所有能包含进来的功能,是到目前为止,伴随JDK发布的功能最为强大的运行、监视和故障排查程序。

Reference

大型分布式网站架构设计与实践 陈康贤 著

猜你喜欢

转载自agilestyle.iteye.com/blog/2371409