虚拟机性能监控与故障处理工具の6个命令工具

来源:互联网 发布:iphone投影到mac 编辑:程序博客网 时间:2024/06/10 22:39

今天看了书,《深入理解JAVA虚拟机JVM高级特性与最佳实践》的第四章——“虚拟机性能监控与故障处理工具”

 

书上介绍了JDK的6个命令工具和2个可视化的故障处理工具。 今天我就来一一试试,看是不是真的像书上的说那么神奇。 不过书上也说了,Linux下可以查看的命令和使用的功能更全面,Windows下很多命令不支持。嗯,今天先试试Windows下的水,改天装了Linux再试一下。

 

一、概述

1、给一个系统定位问题的时候,需要的数据常包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。

2、监控工具使用JAVA代码实现的原因是:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程Telnet到服务器上,都可能会受到限制。使用JAVA代码实现,把真实的实现放到.tools类库中实现,可以实现直接在应用程序中监测分析的功能!

 

二、6大命令工具

1、jps

      JVMProcess Status 虚拟机进程状况工具:列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及进程的本地虚拟机的唯一ID。

      对于本地JVM来说,LVMID(Local VirtualMachine Identifer)与操作系统的进程ID(ProcessIdentifier, PID)是一致的。

      下面就来试试:【jsp执行样例】


(这里还出了一个小插曲,我一直以为这个l是1,然后cmd给我报错说illegalargument…尴尬…)

上面是jsp的常见选项:

-l 输出主类的全名

-m 输出JVM进程启动时传递给main()的参数

-q 输出LVMID

-v 输出JVM启动时的参数

 

2、jstat

JVM StatisticsMonotoring Tool 虚拟机统计信息监视工具:纯文本状态下监视JVM各种运行状态信息。

如果是本地JVM,VMID与LVMID是一致的,如果是远程JVM进程,VMID的格式应该是 [protocol:] [//]lvmid[@hostname[:port]/servername]

主要查询3类信息:

-class 类装载

-gc 垃圾收集

-compiler 运行期编译情况

下面是在cmd里面查看的情况,这里我开了一个java的LVMID是9088,现在通过jstat来查询一下:



可以看到,更改代码之后,YGC了3次,使用时间YGCT=0.006秒。

 

3、jinfo

Configurationinfo for java JAVA配置信息工具:实时查看和调整JVM各项参数。

Jinfo对Windows平台的限制较大,JDK1.6只提供了-flag选项。先试试这个jinfo吧!先可以使用 java –XX:+PrintFlagsFinal查看参数的默认值:

然后使用jinfo 中间的CMS…是查询该CMS…的参数值

4、jmap

Memory Map for JAVA 内存映像工具:用于生成dump文件(堆转储快照)。

Jmap对windows也有限制,只能使用-dump查看每个类的实例、空间占用统计的-histo。其他的查询finalize执行队列、java堆和永久代的空间使用率、使用的收集器等只能在Linux下使用。

在该目录下生成了一个名为 eclipse.bin 的bin文件。

5、jhat

JVM Heap Analysis Tool 虚拟机堆转储快照分析工具:用来分析jmap生成的dump的。 但是一般不用这个(因为后面会讲VisualVM)

6、jstack

Stack Trace for JAVA 堆栈跟踪工具:生成JVM的javacore文件(当前时刻的线程快照)。

生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待。

Jstack的大部分功能都可以用getAllStackTraces()方法来获取所有线程的stacktraceelement对象来实现。

 

明天接着介绍两个可视化工具吧!

 

1 0
原创粉丝点击