Java虚拟机监控命令

熟悉java的人都知道jdk的bin目录中有很多小工具,其中就包括用于监视虚拟机和故障处理的工具,今天就来仔细了解下各个工具的用法

jps



JVM Process Status Tool,用于显示指定系统的内所有的Hotapot的虚拟机进程

1.用法

 jps [options] [hostid]

2.参数列表

q:只输出LVMID,省略主类的名称
m:输出虚拟机进程启动时传递给主类main()函数的参数
l:输出主类的全名。若进程执行的是jar包,则输出jar路径
v:输出虚拟机进程启动时JVM参数

3.实际举例:

1. jps -q :只输出LVMID,省略主类的名称

2. jps -m:输出虚拟机进程启动时传递给主类main()函数的参数

3.jps -l:输出主类的全名。若进程执行的是jar包,则输出jar路径

4.jps -v:输出虚拟机进程启动时JVM参数

5.参数 vl一起:这样我们就能很方便的查看各个程序设定的参数了

jstat



Java Statisstic Monitoring Tool :一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量

1.用法

jstat [Options] vmid [interval] [count]

Options,选项,我们一般使用 -gcutil 查看gc情况vmid,VM的进程号,即当前运行的java进程号interval,间隔时间,单位为秒或者毫秒count,打印次数,如果缺省则打印无数次

2.参数列表

 jstat -class pid:显示加载class的数量,及所占空间等信息。
    jstat -compiler pid:显示VM实时编译的数量等信息。
    jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
    jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
    jstat -gcnew pid:new对象的信息。
    jstat -gcnewcapacity pid:new对象的信息及其占用量。
    jstat -gcold pid:old对象的信息。
    jstat -gcoldcapacity pid:old对象的信息及其占用量。
    jstat -gcpermcapacity pid: perm对象的信息及其占用量。
    jstat -util pid:统计gc信息统计。
    jstat -printcompilation pid:当前VM执行的信息。
    除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。  

3.实际举例

1. -gc:监视java堆状况

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
         S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
         S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
         S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
         EC:年轻代中Eden的容量 (字节)
         EU:年轻代中Eden目前已使用空间 (字节)
         OC:Old代的容量 (字节)
         OU:Old代目前已使用空间 (字节)
         PC:Perm(持久代)的容量 (字节)
         PU:Perm(持久代)目前已使用空间 (字节)
         YGC:从应用程序启动到采样时年轻代中gc次数 

2.-gcutil:与-gc基本相同,但输出的是已使用空间占总空间的大小

jinfo



Configuration Info for Java:实时的查看和调整虚拟机各项参数

1.用法:

 jinfo [option] <pid>

2.参数:

jinfo 主要就是flag参数了,上图已经解释的很清楚了,这里直接做演示好了

3.实际举例

1.获取进程30018的SurvivorRatio信息

2.获取进程30018 所有的jvm信息

这个命令比jps -v更加详细

jmap


打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成
文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log
可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC
回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进
程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool)或与jhat (Java Heap Analysis Tool)一起使用,
能够以图像的形式直观的展示当前内存是否有问题。

1.用法

 jmap [option] <pid>

2.参数

1)、options: 

executable Java executable from which the core dump was produced.

(可能是产生core dump的java可执行程序)

core 将被打印信息的core dump文件

remote-hostname-or-IP 远程debug服务的主机名或ip

server-id 唯一id,假如一台主机上多个远程debug服务 

2)、基本参数:

-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件. 

-finalizerinfo 打印正等候回收的对象的信息.

-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量. 

-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来. 

-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效. 

-h | -help 打印辅助信息 

-J 传递参数给jmap启动的jvm. 

pid 需要被打印配相信息的java进程id

3.实际举例

1.jmap -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

这个命令非常直观的显示了JVM各个区域的生存情况,线上还款内存出现异常可以先用这个命令做一个大致的了解

2.jmap -histo:

这个命令会把所有的类都打出来,并按占用内存的大小进行排序

3.jmap -dump:

解释下 jmap -F -dump:format=b,file=payment.bin 30018:  使用hprof二进制形式,输出进程为30018的jvm的heap内容到文件payment.bin

jhat



是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言

我们现在来分析下上文产生的payment.bin

用浏览器访问http://localhost:7000/,会发现所有的类按包名进行分类,我们可以访问底部的这个标签,看到的内容和jmap -histo:是一样的

参考



http://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024986.html

http://blog.csdn.net/zlzlei/article/details/46471627

原文地址:https://www.cnblogs.com/xmzJava/p/8524949.html

时间: 2024-08-29 12:47:15

Java虚拟机监控命令的相关文章

java虚拟机监控jconsole学习

开发环境: 服务器系统:Linux Web容器:Resin Java版本:ORAClE,JRockit 由于Java1.5版本以上带有自定义的监控JConsole用来检测java虚拟机的运行情况. 在Resin的启动配置文件resin.conf中的JVM参数下配置一下参数: <span style="font-size:14px;"><jvm-arg>-Dcom.sun.management.jmxremote.port=9999</jvm-arg>

Java 内存监控命令简介(零)

一.Java性能监控与调优命令.工具简介 1.jps :查看当前运行的Java程序端口号,包括运行jps的程序端口号. 2.jinfo :查看Java进程的运行时信息. 3.jmap + MAT :通过jmap导出内存映像,然后通过MAT分析映像. 4.jstack :查看线程状态,检测程序中的死锁或者死循环. 5.Jvisualvm : 可视化的监控本地或者远程的Java进程. 6.Btrace :线上监控与调试. 二.Tomcat性能监控工具 1.tomcat-manager监控 2.psi

Java虚拟机定义

虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.[1] 中文名 java虚拟机 外文名 Java Virtual Machine 目录 1定义 2简介 3特点 4使用主体 5安装方法 6数据类型 7规格描述 ? JVM指令系统 ? JVM寄

Java虚拟机8:虚拟机性能监控与故障处理工具

http://www.cnblogs.com/xrq730/p/4842483.html 前言 定位系统问题的时候,知识.经验是基础,数据是依据,工具是运用知识处理数据的手段.这里说的数据包括:运行日志.异常堆栈.GC日志.线程快照.堆转储快照等.经常使用适当的虚拟机监控和分析的工具可以加快分析数据.定位解决问题的速度. jps:虚拟机进程状况工具 首先约定一下运行的代码都是以下这段 1 public class TestMain 2 { 3 public static void main(St

深入理解JAVA虚拟机 虚拟机性能监控和故障处理工具

jre的bin目录下的工具,都非常小.它都是tools.jar下面的代码的一层封装而已.tools.jar不是java标准,是Hotspot实现的. 名称 作用 jps JVM Process Status Tool,现实指定系统内所有的HotSpot虚拟机进程 jstat JVM Statistics Monitoring Tool,用于收集Hotspot虚拟机各个方面的运行参数 jinfo Configuration Info for Java,现实虚拟机配置信息 jmap Memory m

Java虚拟机学习8:虚拟机性能监控与故障处理工具

前言 定位系统问题的时候,知识.经验是基础,数据是依据,工具是运用知识处理数据的手段.这里说的数据包括:运行日志.异常堆栈.GC日志.线程快照.堆转储快照等.经常使用适当的虚拟机监控和分析的工具可以加快分析数据.定位解决问题的速度. jps:虚拟机进程状况工具 首先约定一下运行的代码都是以下这段 1 public class TestMain 2 { 3 public static void main(String[] args) 4 { 5 while (true) 6 { 7 8 } 9 }

Java虚拟机内存模型及垃圾回收监控调优

Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存模型         正如你上图所看到的,JVM内存可以划分为不同的部分,广义上,JVM堆内存可以划分为两部分:年轻代和老年代(Young Generation and Old Generation) 年轻代(Young Generation) 年轻代用于存放由new所生成的对象.当年轻代空间满时,

《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念,才能继续往下学习. 本节学习重点 本节主要是针对JVM内存管理机制的一些监控手段,例如堆情况使用的监控,线程栈情况的监控等.有几句废话还是有必要在这里强调的,工具是人类思维的工具,例如Java语言是人类满足需求的一种技术手段,而监控工具只是维护程序应用的一种手段.所以,思考的逻辑思维要清晰,是问题引导工具,

Java虚拟机(五):JVM调优-命令篇

运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决.所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命令的使用也让我们更能了解jvm构成和特性. Sun JDK监控和故障处理命令有jps jstat j