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