`
brandNewUser
  • 浏览: 456902 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDK内部工具详解

阅读更多


 

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 - 如果protocolhostname都没有指定,那表示的是与当前环境相关的本地协议,如果指定了hostname却没有指定protocol,那么protocol的默认就是rmi

hostname - 服务器的IP或者名称,没有指定则表示本机。

port - 远程rmi的端口,如果没有指定则默认为1099

Servername - 注册到RMI注册中心中的jstatd的名称。

 

jstack

jstack用于打印出给定的java进程IDcore file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64"Windowsjstack使用方式只支持以下的这种方式:

jstack [-l] pid

 

如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stacknative stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stacknative 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.concurrentownable synchronizers列表.

-m 混合模式输出(包括java和本地c/c++片段)堆栈。

 

1) options 

executable Java executable from which the core dump was produced.(可能是产生core dumpjava可执行程序)

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

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

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

2)基本参数:

-F当“jstack [-l] pid”没有响应的时候强制打印栈信息;

-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrentownable synchronizers列表;

-m打印javanative c/c++框架的所有栈信息;

-h | -help打印帮助信息。

 

pid: java应用程序的进程号,一般可以通过jps来获得;

executable:产生core dumpjava可执行程序;

core:打印出的core文件;

remote-hostname-or-ip:远程debug服务器的名称或IP;

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

 

jstat

Jstat用于监控基于HotSpotJVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:

类的加载及卸载情况;

查看新生代、老生代及持久代的容量及使用情况;

查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间;

查看新生代中Eden区及Survior区中容量及分配情况等;

 

jstat工具特别强大,它有众多的可选项,通过提供多种不同的监控维度,使我们可以从不同的维度来了解到当前JVM堆的使用情况。详细查看堆内各个部分的使用量,使用的时候必须加上待统计的Java进程号,可选的不同维度参数以及可选的统计频率参数。

 

它主要是用来显示GCPermGen相关的信息,如果对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 Solarishttp://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–间隔时间,单位可以是秒或者毫秒,通过指定sms确定,默认单位为毫秒。

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 dumpjava可执行程序)

 

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

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

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

基本参数:

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

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

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

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

-permstat:打印classloaderjvm 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 如:查看2788MaxPerm大小可以用  jinfo -flag MaxPermSize 2788

 

 

  • 大小: 32.3 KB
  • 大小: 41.9 KB
  • 大小: 104.4 KB
  • 大小: 116.9 KB
  • 大小: 25.7 KB
  • 大小: 144.4 KB
  • 大小: 81.2 KB
  • 大小: 81.2 KB
  • 大小: 70.7 KB
  • 大小: 64.6 KB
  • 大小: 89.3 KB
  • 大小: 48.3 KB
  • 大小: 64.4 KB
分享到:
评论

相关推荐

    java—JDK内置工具使用技巧详解

    ### JDK内置工具使用技巧详解 #### 一、引言 JDK(Java Development Kit)作为Java编程语言的核心组件,不仅提供了必要的编译、调试及文档工具,还配备了一系列用于监控和诊断应用程序运行状态的工具。本文将详细...

    jdk动态代理技术详解

    JDK 动态代理技术详解 JDK 动态代理技术是 Java 语言自身对动态代理的支持,类似于 JDK 中在 java.util 包中提供 Observable 类和 Observer 接口提供对观察者模式的语言级支持。动态代理的优点是可以动态地为软件...

    jdk命令详解,jdk,很全

    jdk 命令详解 JDK(Java Development Kit)是一套完整的 Java 开发工具包,由 Sun 公司提供,旨在帮助开发者方便地开发和调试 Java 应用程序。JDK 中提供了许多实用的工具和命令,这些命令都位于 JDK 的 bin 目录下...

    JDK1.8__Windows__X64

    **JDK 1.8 for Windows X64: 安装与配置详解** JDK (Java Development Kit) 是Oracle公司发布的用于开发Java应用程序的软件工具包。JDK 1.8是Java的一个重要版本,引入了许多新特性,优化了性能,并且提供了广泛的...

    JDK11&JDK12新特性详解1

    【JDK 11新特性详解】 JDK 11是Oracle官方在2018年9月26日发布的重要版本,它是Java 8之后的第一个长期支持版本(LTS)。这一版本引入了一系列的新特性,旨在提升性能、安全性和开发效率。以下是JDK 11的主要新特性...

    JDK8十大新特性详解

    ### JDK8十大新特性详解 #### 一、接口的默认方法 在JDK8之前,接口只能定义抽象方法,不允许有具体的实现。然而在JDK8中引入了一个重要的概念——**默认方法**(Default Methods)。这允许我们在接口中提供一个...

    jdk与jre的区别

    - **关系**:JDK中包含了一套完整的JRE,用于运行其内部工具;而安装在系统指定位置的JRE则用于运行普通Java应用程序。 理解JDK与JRE的区别对于正确配置Java开发和运行环境至关重要。确保正确安装并配置这两者,...

    JDK8/jdk1.8压缩版文件下载(压缩包)(无积分免费下载)

    6. **src.zip**: 这是一个包含Java源代码的压缩文件,开发者可以查看JDK的源代码,这对于学习Java语言和理解JDK内部工作原理非常有帮助。 7. **javafx-src.zip**: JavaFX是Java的一个图形用户界面(GUI)工具包,这...

    JDK1.6安装和配置详解(图文说明)

    ### JDK1.6安装与配置详解 #### 一、前言 Java 开发工具包 (JDK) 是学习 Java 编程语言的基础。对于初学者来说,正确安装和配置 JDK 环境至关重要。本文将详细介绍如何安装 JDK1.6,并进行必要的环境变量配置。 ##...

    jdk1.8.0-131版本安装包

    **Java Development Kit (JDK) 1.8.0_131 安装详解** JDK(Java Development Kit)是Oracle公司发布的用于开发和运行Java应用程序的重要工具集。JDK 1.8.0_131是Java 8的一个特定更新版本,它包含了Java编译器、...

    jdk-12.0.2_64bit 最新官方版本jdk

    **Java Development Kit (JDK) 12.0.2详解** JDK,全称Java Development Kit,是Oracle公司发布的用于开发Java应用程序的工具包。它包含了Java虚拟机(JVM)、编译器(javac)、Java类库以及各种开发和调试工具。...

    32位1.8版本的JDK

    - `src.zip`和`javafx-src.zip`:源代码压缩包,开发者可以通过查看源码来理解JDK内部的工作原理。 - `bin`:包含了各种命令行工具,如javac、java、jar等,用于开发和管理Java应用程序。 - `include`:包含了...

    jdk1.8.0-161

    **Java Development Kit (JDK) 1.8.0_161详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件工具包。它包含了Java编译器、Java运行环境、Java虚拟机(JVM)、类库以及其他必要的工具...

    JDK /bin目录下常用命令详解

    JDK/bin目录下常用命令详解 JDK(Java Development Kit)是 Sun 公司的 Java 软件产品,提供了多种工具和命令来帮助开发和调试 JAVA 应用程序。所有命令都可以在 JDK 的 bin 目录下找到。每个命令都可以使用“-help...

    JDK1.8 windows 64位

    **Java Development Kit (JDK) 1.8 for Windows 64位详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的重要工具集,它包含了Java编译器、Java运行环境、调试器、性能分析工具以及一系列...

    jdk1.8.0_152

    **Java Development Kit (JDK) 1.8.0_152详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件工具包。它包含了编译器、调试器、JRE(Java Runtime Environment)以及一系列用于开发和...

    jdk 工具包 asmtools.jar

    "jdk 工具包 asmtools.jar" 是一个与Java开发相关的工具包,其中包含了ASMTools,这是Java开发工具集的一部分,主要用于处理Java字节码。ASMTools是一个实用程序,提供了对字节码进行反汇编和汇编的能力,允许开发者...

    jdk源码(完整版)

    **Java Development Kit (JDK) 源码详解** JDK,即Java Development Kit,是Java编程语言的核心组件,包含了编译器、运行时环境、工具集和其他必要的资源,用于开发和运行Java应用程序。这里提到的"jdk源码(完整版...

    jdk_11.0.1 免安装版

    **Java Development Kit (JDK) 11.0.1免安装版详解** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的重要工具集,它包含了Java编译器、Java运行时环境(JRE)、调试器以及其他必要的工具。...

Global site tag (gtag.js) - Google Analytics