`
brandNewUser
  • 浏览: 447299 次
  • 性别: 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 WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    java基础案例与开发详解案例源码全

    1.4.2 JDK安装目录和实用命令工具介绍12 1.4.3 设置环境变量13 1.4.4 验证配置的正确性14 1.5 MyEcilpse工具介绍JavaSE环境安装和配置15 1.6 本章练习16 第2章 2.1 什么是程序18 2.2 计算机中的程序18 2.3 Java程序...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    Web服务器三剑客运维配置实战 Nginx+JVM+Tomcat+HTTP协议.zip

    ├─1.06 Nginx进阶基础-IO多路复用及内部技术架构.mp4 ├─1.07 Nginx进阶基础-虚拟主机.mp4 ├─1.08 Nginx进阶基础-虚拟主机.mp4 ├─2.01 Nginx进阶常见配置-虚拟主机+PHP-FPM.mp4 ├─2.02 Nginx进阶-常见配置-...

    疯狂JAVA讲义

    学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑...

    Java开发技术大全 电子版

    13.6.2时间格式转换符详解415 13.6.3格式说明符语法图417 13.7正则表达式417 13.7.1正则表达式的作用418 13.7.2正则表达式的基本规则418 13.7.3正则表达式中的一些高级规则421 13.7.4正则表达式中的其他通用...

    android开发入门与实战(下)

    2.2.1 JDK、Eclipse、AndroidSDK软件安装 2.2.2 SDK的家在哪里——设定AndroidSDKHome 2.2.3 真的准备好了吗——开发环境验证 2.2.4 创建Android虚拟设备(AVD) 2.3 Linux一族——Ubuntu开发环境搭建 2.3.1 Java、...

    android开发入门与实战(上)

    2.2.1 JDK、Eclipse、AndroidSDK软件安装 2.2.2 SDK的家在哪里——设定AndroidSDKHome 2.2.3 真的准备好了吗——开发环境验证 2.2.4 创建Android虚拟设备(AVD) 2.3 Linux一族——Ubuntu开发环境搭建 2.3.1 Java、...

    Google Android开发入门与实战的代码

    2.2.1 JDK、Eclipse、Android SDK软件安装 8 2.2.2 SDK的家在哪里——设定Android SDK Home 14 2.2.3 真的准备好了吗——开发环境验证 14 2.2.4 创建Android 虚拟设备(AVD) 15 2.3 Linux一族——Ubuntu...

    iuhyiuhkjh908u0980

    ant配置文件实例详解 build.xml 代码 xml version="1.0" encoding="UTF-8"?&gt; &lt;!-- name:对应工程的名字;default:需要的缺省任务(运行"ant"不指明任务时执行的任务) --&gt; by duzn 2007-04-02 回复 (0) Antenna与j2me...

    《Google Android开发入门与实战》.pdf

    2.2.1 jdk、eclipse、android sdk软件安装 8 2.2.2 sdk的家在哪里——设定android sdk home 14 2.2.3 真的准备好了吗——开发环境验证 14 2.2.4 创建android 虚拟设备(avd) 15 2.3 linux一族——ubuntu...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.3. bean属性及构造器参数详解 3.3.3.1. 直接量(基本类型、Strings类型等。) 3.3.3.2. 引用其它的bean(协作者) 3.3.3.3. 内部bean 3.3.3.4. 集合 3.3.3.5. Nulls 3.3.3.6. XML-based configuration metadata ...

    Google.Android开发入门与实战

    2.2.1 JDK、Eclipse、AndroidSDK软件安装 2.2.2 SDK的家在哪里——设定AndroidSDKHome 2.2.3 真的准备好了吗——开发环境验证 2.2.4 创建Android虚拟设备(AVD) 2.3 Linux一族——Ubuntu开发环境搭建 2.3.1 Java、...

Global site tag (gtag.js) - Google Analytics