1.JMAP

Jmap命令用于生成堆转储快照,有时候也成为heapdump或者dump文件。

Jmap不仅仅可以获取dump文件,还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当时用的是那种收集器等。

jmap -histo

(to connect to running process and print histogram of java object heap

jmap -dump:

(to connect to running process and dump java heap)

dump-options:

format=b     binary default

file=  dump heap to

Example:       jmap -dump:format=b,file=heap.bin

-heap:打印jvm heap的情况

-histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。

-histo:live :同上,但是只答应存活对象的情况

-permstat:打印permanent generation heap情况[1]

2.javah

用法:javah [选项]

其中 [选项] 包括:

-help                 输出此帮助消息并退出

-classpath     用于装入类的路径

-bootclasspath 用于装入引导类的路径

-d             输出目录

-o             输出文件(只能使用 -d 或 -o 中的

-jni                  生成 JNI样式的头文件(默认)

-version              输出版本信息

-verbose              启用详细输出

-force                始终写入输出文件

使用全限定名称指定 (例

如,java.lang.Object)。

比如定义了一个java类 可以转换成c的头文件和类

package test;

public class Test{

public final static String hello()

{

System.out.print("hello");

}

native static String chello();

}

使用 C:\test 写入Test.java文件

使用命令  javac  C:\test\Test.java 编译

使用 javah命令

cd C:

C:\>javah -jni -d C:\test test.Test

可以看到 C:\test 生成了test_Test.h

3.jps

用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。

使用jps时,如果没有指定hostid,它只会显示本地环境中所有的Java进程;如果指定了hostid,它就会显示指定hostid上面的java进程,不过这需要远程服务上开启了jstatd服务,可以参看前面的jstatd章节来启动jstad服务。

usage: jps [-help]

jps [-q] [-mlvV] []

Definitions:

:      [:]

4.jstack

用于打印堆栈信息

Usage:

jstack [-l]

(to connect to running process)

Options:

-l  long listing. Prints additional information ab

-h or -help to print this help message

5.jstat

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

- 类的加载及卸载情况

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

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

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

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

Usage: jstat -help|-options

jstat - [-t] [-h] [ []]

Definitions:

     An option reported by the -options option

       Virtual Machine Identifier. A vmid takes the following form:

[@[:]]

Where is the local vm identifier for the target

Java virtual machine, typically a process id; is

the name of the host running the target Java virtual machine;

and is the port number for the rmiregistry on the

target host. See the jvmstat documentation for a more complete

description of the Virtual Machine Identifier.

      Number of samples between header lines.

   Sampling interval. The following forms are allowed:

["ms"|"s"]

Where is an integer and the suffix specifies the units as

milliseconds("ms") or seconds("s"). The default units are "ms".

      Number of samples to take before terminating.

-J      Pass directly to the runtime system.

6.jinfo

可以查看vm参数或者修改vm参数

例如

C:\Documents and Settings\Administrator>jinfo -flag MaxPermSize 3176

-XX:MaxPermSize=67108864

C:\Documents and Settings\Administrator>jinfo -flag CompileThreshold 3176

-XX:CompileThreshold=1500

C:\Documents and Settings\Administrator>jinfo -flag ThreadStackSize 3176

-XX:ThreadStackSize=0

Usage:     jinfo        (to connect to a running process) where is one of:     -flag         to print the value of the named VM flag     -flag [+|-]    to enable or disable the named VM flag     -flag = to set the named VM flag to the given value     -h | -help           to print this help message