jps
用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,并显示他们的进程号,使用jps时,不需要传递进程号做为参数。
Jps也可以显示远程系统上的JAVA进程,这需要远程服务上开启了jstatd服务,以及RMI注及服务,不过常用都是对本对的JAVA进程的查看。
命令格式
jps [ options ] [ hostid ]
常用参数说明
-q 忽略输出的类名、Jar名以及传递给main方法的参数,只输出pid。
-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。
-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。
-v 输出传给JVM的参数。
-V 输出通过标记的文件传递给JVM的参数(.hotspotrc文件,或者是通过参数-XX:Flags=<filename>指定的文件)。
-J 用于传递jvm选项到由javac调用的java加载器中,例如,“-J-Xms48m”将把启动内存设置为48M,使用-J选项可以非常方便的向基于Java的开发的底层虚拟机应用程序传递参数。
服务器标识
hostid指定了目标的服务器,它的语法如下:
[protocol:][[//]hostname][:port][/servername]
protocol - 如果protocol及hostname都没有指定,那表示的是与当前环境相关的本地协议,如果指定了hostname却没有指定protocol,那么protocol的默认就是rmi。
hostname - 服务器的IP或者名称,没有指定则表示本机。
port - 远程rmi的端口,如果没有指定则默认为1099。
Servername - 注册到RMI注册中心中的jstatd的名称。
jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:
jstack [-l] pid
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
命令格式
jstack [ option ] pidjstack [ option ] executable corejstack [ option ] [server-id@]remote-hostname-or-IP
常用参数说明
-F jstack [-l] pid无法响应时,强制打印堆栈
-l l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m 混合模式输出(包括java和本地c/c++片段)堆栈。
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)基本参数:
-F当“jstack [-l] pid”没有响应的时候强制打印栈信息;
-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表;
-m打印java和native c/c++框架的所有栈信息;
-h | -help打印帮助信息。
pid: java应用程序的进程号,一般可以通过jps来获得;
executable:产生core dump的java可执行程序;
core:打印出的core文件;
remote-hostname-or-ip:远程debug服务器的名称或IP;
server-id: 唯一id,假如一台主机上多个远程debug服务;
jstat
Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:
类的加载及卸载情况;
查看新生代、老生代及持久代的容量及使用情况;
查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间;
查看新生代中Eden区及Survior区中容量及分配情况等;
jstat工具特别强大,它有众多的可选项,通过提供多种不同的监控维度,使我们可以从不同的维度来了解到当前JVM堆的使用情况。详细查看堆内各个部分的使用量,使用的时候必须加上待统计的Java进程号,可选的不同维度参数以及可选的统计频率参数。
它主要是用来显示GC及PermGen相关的信息,如果对GC不怎么了解,先看这篇文章:http://blog.csdn.net/fenglibing/archive/2011/04/13/6321453.aspx,否则其中即使你会使用jstat这个命令,你也看不懂它的输出。
语法
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
generalOption:单个的常用的命令行选项,如-help, -options, 或 -version。
outputOptions:一个或多个输出选项,由单个的statOption选项组成,可以和-t, -h, and -J等选项配合使用。
statOption:根据jstat统计的维度不同,可以使用如下表中的选项进行不同维度的统计,不同的操作系统支持的选项可能会不一样,可以通过-options选项,查看不同操作系统所支持选项,如:
选项 |
作用 |
class |
用于查看类加载情况的统计 |
compiler |
用于查看Hotspot中即时编译器编译情况的统计 |
gc |
用于查看JVM中堆的垃圾收集情况的统计 |
gccapacity |
用于查看新生代、老生代及持久代的存储容量情况 |
gccause |
用于查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示出最后一次及当前正在发生垃圾收集的原因 |
gcnew |
用于查看新生代垃圾收集的情况 |
gcnewcapacity |
用于查看新生代的存储容量情况 |
gcold |
用于查看老生代及持久代发生GC的情况 |
gcoldcapacity |
用于查看老生代的容量 |
gcpermcapacity |
用于查看持久代的容量 |
gcutil |
用于查看新生代、老生代及持久代垃圾收集的情况 |
printcompilation |
Hotspot编译方法的统计 |
-h n:用于指定每隔几行就输出列头,如果不指定,默认是只在第一行出现列头。
-J javaOption:用于将给定的javaOption传给java应用程序加载器,例如,“-J-Xms48m”将把启动内存设置为48M。如果想查看可以传递哪些选项到应用程序加载器中,可以相看如下的文档:
Linux and Solaris:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/java.html
Windows: http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/java.html
-t n:用于在输出内容的第一列显示时间戳,这个时间戳代表的时JVM开始启动到现在的时间(注:在IBM JDK5中是没有这个选项的)。
vmid:- VM的进程号,即当前运行的java进程号。
还有两个关于显示频率的选项:
interval–间隔时间,单位可以是秒或者毫秒,通过指定s或ms确定,默认单位为毫秒。
count - 打印次数,如果缺省则打印无数次。
不同的统计维度(statOption)及输出说明
-class
-compiler
-gc
-gccapacity
-gccause
这个选项用于查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因,它比-gcutil会多出最后一次垃圾收集原因以及当前正在发生的垃圾收集的原因。
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
从应用程序启动到采样时发生 Full GC 的次数
-gcutil
-printcompilation
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),使用参见这个博客,博主写得非常好,http://blog.csdn.net/fenglibing/archive/2011/04/02/6298326.aspx)或与jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。
64位机上使用需要使用如下方式:jmap -J-d64 -heap pid
命令格式
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
参数说明
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服务;
基本参数:
-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件;
-finalizerinfo:打印正等候回收的对象的信息;
-heap:打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况;
-histo:[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量;
-permstat:打印classloader和jvm heap长久层的信息。 包含每个classloader的名字,父classloader和加载的class数量。另外,内部String的数量和占用内存数也会打印出来;
-F:强迫.在pid没有相应的时候使用-dump或者-histo参数。在这个模式下,live子参数无效;
-h: | -help 打印辅助信息;
-J :传递参数给jmap启动的jvm;
jhat
用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。
jinfo
jinfo可以输出并修改运行时的java 进程的opts。用处比较简单,用于输出JAVA系统参数及命令行参数。用法是jinfo -opt pid 如:查看2788的MaxPerm大小可以用 jinfo -flag MaxPermSize 2788。
相关推荐
### JDK内置工具使用技巧详解 #### 一、引言 JDK(Java Development Kit)作为Java编程语言的核心组件,不仅提供了必要的编译、调试及文档工具,还配备了一系列用于监控和诊断应用程序运行状态的工具。本文将详细...
JDK 动态代理技术详解 JDK 动态代理技术是 Java 语言自身对动态代理的支持,类似于 JDK 中在 java.util 包中提供 Observable 类和 Observer 接口提供对观察者模式的语言级支持。动态代理的优点是可以动态地为软件...
jdk 命令详解 JDK(Java Development Kit)是一套完整的 Java 开发工具包,由 Sun 公司提供,旨在帮助开发者方便地开发和调试 Java 应用程序。JDK 中提供了许多实用的工具和命令,这些命令都位于 JDK 的 bin 目录下...
**JDK 1.8 for Windows X64: 安装与配置详解** JDK (Java Development Kit) 是Oracle公司发布的用于开发Java应用程序的软件工具包。JDK 1.8是Java的一个重要版本,引入了许多新特性,优化了性能,并且提供了广泛的...
【JDK 11新特性详解】 JDK 11是Oracle官方在2018年9月26日发布的重要版本,它是Java 8之后的第一个长期支持版本(LTS)。这一版本引入了一系列的新特性,旨在提升性能、安全性和开发效率。以下是JDK 11的主要新特性...
### JDK8十大新特性详解 #### 一、接口的默认方法 在JDK8之前,接口只能定义抽象方法,不允许有具体的实现。然而在JDK8中引入了一个重要的概念——**默认方法**(Default Methods)。这允许我们在接口中提供一个...
- **关系**:JDK中包含了一套完整的JRE,用于运行其内部工具;而安装在系统指定位置的JRE则用于运行普通Java应用程序。 理解JDK与JRE的区别对于正确配置Java开发和运行环境至关重要。确保正确安装并配置这两者,...
6. **src.zip**: 这是一个包含Java源代码的压缩文件,开发者可以查看JDK的源代码,这对于学习Java语言和理解JDK内部工作原理非常有帮助。 7. **javafx-src.zip**: JavaFX是Java的一个图形用户界面(GUI)工具包,这...
### JDK1.6安装与配置详解 #### 一、前言 Java 开发工具包 (JDK) 是学习 Java 编程语言的基础。对于初学者来说,正确安装和配置 JDK 环境至关重要。本文将详细介绍如何安装 JDK1.6,并进行必要的环境变量配置。 ##...
**Java Development Kit (JDK) 1.8.0_131 安装详解** JDK(Java Development Kit)是Oracle公司发布的用于开发和运行Java应用程序的重要工具集。JDK 1.8.0_131是Java 8的一个特定更新版本,它包含了Java编译器、...
**Java Development Kit (JDK) 12.0.2详解** JDK,全称Java Development Kit,是Oracle公司发布的用于开发Java应用程序的工具包。它包含了Java虚拟机(JVM)、编译器(javac)、Java类库以及各种开发和调试工具。...
- `src.zip`和`javafx-src.zip`:源代码压缩包,开发者可以通过查看源码来理解JDK内部的工作原理。 - `bin`:包含了各种命令行工具,如javac、java、jar等,用于开发和管理Java应用程序。 - `include`:包含了...
**Java Development Kit (JDK) 1.8.0_161详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件工具包。它包含了Java编译器、Java运行环境、Java虚拟机(JVM)、类库以及其他必要的工具...
JDK/bin目录下常用命令详解 JDK(Java Development Kit)是 Sun 公司的 Java 软件产品,提供了多种工具和命令来帮助开发和调试 JAVA 应用程序。所有命令都可以在 JDK 的 bin 目录下找到。每个命令都可以使用“-help...
**Java Development Kit (JDK) 1.8 for Windows 64位详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的重要工具集,它包含了Java编译器、Java运行环境、调试器、性能分析工具以及一系列...
**Java Development Kit (JDK) 1.8.0_152详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件工具包。它包含了编译器、调试器、JRE(Java Runtime Environment)以及一系列用于开发和...
"jdk 工具包 asmtools.jar" 是一个与Java开发相关的工具包,其中包含了ASMTools,这是Java开发工具集的一部分,主要用于处理Java字节码。ASMTools是一个实用程序,提供了对字节码进行反汇编和汇编的能力,允许开发者...
**Java Development Kit (JDK) 源码详解** JDK,即Java Development Kit,是Java编程语言的核心组件,包含了编译器、运行时环境、工具集和其他必要的资源,用于开发和运行Java应用程序。这里提到的"jdk源码(完整版...
**Java Development Kit (JDK) 11.0.1免安装版详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的重要工具集,它包含了Java编译器、Java运行时环境(JRE)、调试器以及其他必要的工具。...