4、JVM-虚拟机性能监控与故障处理工具

前言:

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想
进去,墙里面的人却想出来。

4.1、概述

给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处
理数据的手段。这里说的数据包括:运行日志异常堆栈GC日志线程快照
(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。经常使用适当的虚拟
机监控和分析的工具可以加快我们分析数据、定位解决问题的速度。

------工具永远都是知识技能的一层包装

4.2、JDK的命令行

JDK的bin目录中有“java.exe”、“javac.exe”这两个命令行工具

每逢JDK更新版本之时,bin目录下命令行工具的数量和功能总会不知不觉地增加和增强

如图所示:展示一部分

 这些工具的程序提及非常小

这些命令行工具大多数jdk/lib/tools.jar类库的一层包装而已

主要的功能实现代码是在tools类库中实现的

若是使用Linux的JDK,可以发现这些工具中就是Shell直接写成的

可以使用vim打开

当应用程序部署到生产环境后

无论是直接接触物理服务器还是远程Telent到服务器都可能收到限制

借助tools.jar类库中的接口

可以直接在应用程序中实现强大的监控分析功能

JDK主要命令行以及监控工具的用途:

4.2.1、jsp:虚拟机进程工具

JDK的很多小工具都参考了UNIX命令的命名方式

jps(JVM Process StatusTool)是其中的典型

出列名字项UNIX的ps命令方式之外

它的功能也和ps命令类似:

可以列出正在运行的虚拟进程

并显示虚拟机执行主类(Main、Class、main()函数所在类)名称

以及这些进程在本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)

虽然功能比较单一

但是是使用频率最高的JDK命令工具

因为其他的JDK工具大多需要输入它查询到的LVMID来确定需要监控的哪一个虚拟机

对于本地虚拟机来说

LVMID与操作系统进程ID是一致的

使用Windows的任务管理器或者UNIX的ps命令也可以查询到虚拟机进程的LVMID

但是吐过同时启动了多个虚拟机进程

无法根据进程名进行定位时,此时只能依赖jps命令来显示

jps命令格式:

jps [options][hostid]

jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态

hostid:为RMI注册表中的注册主机名

其他选项:

执行效果:

test1是正在运行的main函数

4.2.2、jstat:虚拟机统计信息监控工具

jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机中各种运行状态信息的命令工具

在没有GUI图形界面,只提供了纯文本的控制台环境的服务器上

将是运行期定位虚拟机性能问题的首选工具

命令格式:

jstat[option vmid[interval[s|ms][count]]]

对于命令格式中的VMID与LVMID需要特别说明一下:

如果是本地的虚拟进程,VMID与LVMID是一致的

如果是远程虚拟进程,那么VMID的格式应当是:

[protocol:][//]lvmid[@hostname[:port]/servername]

参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设
需要每250毫秒查询一次进程2764垃圾收集状况,一共查询20次,那命令应当是:

jstat-gc 2764 250 20

选项option代表着用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集、运行
期编译状况:

猜你喜欢

转载自www.cnblogs.com/Mrchengs/p/10753980.html
今日推荐