JVM调优常用监控工具

1.描述

根据对JVM的理解,想要通过JVM提供的调优参数对JVM的堆、栈等内存进行合理的分配,进而对JVM进行优化是很有限的。只有通过优化代码,提高GC垃圾回收率才是优化JVM的根本途径。往往在程序运行过程中,JVM出现内存溢出、性能不足等问题基本是程序代码编写的不规范、不合理导致的。因此,个人理解对JVM的优化,除了是对JVM本身的优化之外,也是要对程序代码进行优化。比如说内存泄漏、死锁、CPU占用率高等,均能引发JVM出现内存溢出等问题。不过对于很多人来说,往往找不到这些问题的根本所在,因此这篇文章主要是让我们掌握一些工具来分析到底是哪里出现了问题。
工具主要是为了解决问题而生的,就是由于我们的程序存在着一些性能问题,才有了这些工具。其实当我们在下载完成JDK之后,那些工具就被SUN公司随之送给我们了。

2.常见的工具

工具名称 主要功能
jps 显示系统中所有的HotSpot虚拟机进程
jstat 收集HotSpot虚拟机运行时各方面的运行数据
jinfo 显示虚拟机配置信息
jmap 生成虚拟机的内存转储快照(heapdump文件)
jhat 分析内存转储快照
jstack 显示虚拟的线程快照
jconsole JMX的可视化管理工具

3.jps的使用

jps主要用来输出JVM中运行的进程状态信息。语法格式如下:

jps [options] [hostid]

第一个参数:options

-q 不输出类名、Jar名和传入main方法的参数-m 输出传入main方法的参数-l 输出main类或Jar的全名-v 输出传入JVM的参数

第二个参数:hostid

主机或者是服务器的id,如果不指定,就默认为当前的主机或者是服务器。

我是在linux下试验,Windows下使用的方式是一样的,结果可能有不同。你可以选择不同的参数选项来进行测试。
1、jps -q:只能查看到虚拟机线程PID
在这里插入图片描述
2、jps -m:可以查看到传入main方法的参数
在这里插入图片描述
3、jps -l:输出main类或Jar的全名
在这里插入图片描述
4、jps -v:输出传入JVM的参数
JVM调优常用监控工具_第1张图片

4.jstack的使用

jstack用于生成虚拟机当前时刻的线程快照。语法格式如下:

jstack [option] vmid

option:
-F 当正常请求不被响应的时候,强制输出线程堆栈(注意 F 必须大写)
-l 除堆栈外,显示锁的附加信息,还有其他option参数值如下

JVM调优常用监控工具_第2张图片
vmid:
vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID(可通过jps查询)。
测试:
jstack -l:可查看到堆栈线程的运行状态、锁信息,GC 任务线程
JVM调优常用监控工具_第3张图片

5.jstat的使用

jstat监视虚拟机各种运行状态信息,可以显示本地或者是远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。语法格式如下:

jstat [ generalOption | outputOptions vmid [interval] [count]] ]

第一个参数:generalOption | outputOptions

这个参数表示的option,代表着用户希望查询的虚拟机信息,分为类加载、垃圾收集、运行期编译状况3类。
JVM调优常用监控工具_第4张图片

第二个参数:vmid

vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。

第三个参数:interval

interval是采样时间间隔,

第四个参数:count

count表示的是采样数。

测试如下:jstat -gc [vmid] 250 10
JVM调优常用监控工具_第5张图片

6.jinfo的使用

实时地查看和调整虚拟机各项参数
命令格式:

jinfo [option] pid

第一个参数:option
JVM调优常用监控工具_第6张图片

第二个参数:pid

指定显示的进程id。

测试:
jinfo -flags
JVM调优常用监控工具_第7张图片

7.jmap的使用

jmap(Memory Map for Java,内存映像工具),用于生成堆转存的快照,一般是heapdump或者dump文件。如果不适用jmap命令,可以使用-XX:+HeapDumpOnOutOfMemoryError参数,当虚拟机发生内存溢出的时候可以产生快照。或者使用kill -3 pid也可以产生。jmap的作用并不仅仅是为了获取dump文件,它可以查询finalize执行队列,java堆和永久代的详细信息,如空间使用率,当前用的哪种收集器。命令格式如下:

jmap [option] vmid

第一个参数:

JVM调优常用监控工具_第8张图片
第二个参数:vmid

vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID.

8.jhat:分析内存转储快照,不推荐使用,而且慢

由于这个工具功能比较简陋,运行起来也比较耗时,所以这个工具不推荐使用,推荐使用MAT。

9.JConsole:JMX的可视化管理工具

这个工具相比较前面几个工具,使用率比较高,很重要。它是一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。

10.VisualVM:多合一故障管理工具

这个工具也很牛bility。它同jconsole都是一个基于图形化界面的、可以查看本地及远程的JAVA GUI监控工具,Jvisualvm同jconsole的使用方式一样,直接在命令行打入jvisualvm即可启动,jvisualvm界面更美观一些,数据更实时

你可能感兴趣的:(JVM)