JDK内置工具使用html
1、javah命令(C Header and Stub File Generator)java
2、jps命令(Java Virtual Machine Process Status Tool)node
3、jstack命令(Java Stack Trace)linux
4、jstat命令(Java Virtual Machine Statistics Monitoring Tool)c++
5、jmap命令(Java Memory Map)windows
6、jinfo命令(Java Configuration Info)安全
7、jconsole命令(Java Monitoring and Management Console)服务器
8、jvisualvm命令(Java Virtual Machine Monitoring, Troubleshooting, and Profiling Tool)网络
9、jhat命令(Java Heap Analyse Tool)oracle
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 ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP
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进程id,能够用jps查询.
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
这是安全策略文件,由于jdk对jvm作了jaas的安全检测,因此咱们必须设置一些策略,使得jstatd被容许做网络操做
2、jps
列出全部的jvm实例
实例:
jps
列出本机全部的jvm实例
jps 192.168.0.77
列出远程服务器192.168.0.77机器全部的jvm实例,采用rmi协议,默认链接端口为1099
(前提是远程服务器提供jstatd服务)
输出内容以下:
jones@jones:~/data/ebook/java/j2se/jdk_gc$ jps
6286 Jps
6174 Jstat
详细请看链接:http://www.blogjava.net/aoxj/archive/2007/12/29/171447.html
3、jconsole
用法: jconsole [ -interval=n ] [ -notile ] [ -pluginpath ] [ -version ] [ connection ...]
-interval 将更新间隔时间设置为 n 秒(默认值为 4 秒)
-notile 最初不平铺显示窗口(对于两个或更多链接)
-pluginpath 指定 jconsole 用于查找插件的路径
-version 输出程序版本
connection = pid || host:port || JMX URL (service:jmx:://...)
pid 目标进程的进程 ID
host 远程主机名或 IP 地址
port 用于远程链接的端口号
-J 对正在运行 jconsole 的 Java 虚拟机指定输入参数
在cmd中输入命令:jconsole 3980[java进程号] 弹出下图
![]() |
![]() |
![]() |
![]() |
![]() |
4、jinfo
用法:
jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP
参数:
pid 进程号
executable 产生core dump的java executable
core core file
remote-hostname-or-IP 主机名或ip
server-id 远程主机上的debug server的惟一id
选项:
no option 打印命令行参数和系统属性
-flags 打印命令行参数
-sysprops 打印系统属性
-h 帮助
观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数
实例:
jinfo 2083
其中2083就是java进程id号,能够用jps获得这个id号。我在windows上尝试输入这个命令,可是无论用,因而我输入了下面这个命令:
jinfo -flag MaxPermSize 3980
显示以下:
-XX:MaxPermSize=67108864
5、jstack
该命令应该如何使用呢?首先须要用jstack命令产生java进程的dump文件,而后分析dump文件中的数据,下面的链接是一篇讲述如何分析jstack产生的dump文件数据的文章,写的很是不错:
http://www.blogjava.net/jzone/articles/303979.html
6、jmap(linux下特有,也是很经常使用的一个命令)
观察运行中的jvm物理内存的占用状况。
参数以下:
-heap:打印jvm heap的状况
-histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
-histo:live :同上,可是只答应存活对象的状况
-permstat:打印permanent generation heap状况
命令使用:
jmap -heap 2083
能够观察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用状况
jmap -histo 2083 | jmap -histo:live 2083
能够观察heap中全部对象的状况(heap中全部生存的对象的状况)。包括对象数量和所占空间大小。
jmap -histo java进程id
能够查看java进程中的全部实例、实例的个数,可用于查询单例对象是否真的只生成了一个实例。
在控制台,输入命令“jmap -histo 7329 > histo_dump”,获得以下结果:
7、jstat
最后要重点介绍下这个命令,这是jdk命令中比较重要,也是至关实用的一个命令,能够观察到classloader,compiler,gc相关信息。
具体参数以下:
-class:统计class loader行为信息
-compile:统计编译行为信息
-gc:统计jdk gc时heap信息
-gccapacity:统计不一样的generations(不知道怎么翻译好,包括新生区,老年区,permanent区)相应的heap容量状况
-gccause:统计gc的状况,(同-gcutil)和引发gc的事件
-gcnew:统计gc时,新生代的状况
-gcnewcapacity:统计gc时,新生代heap容量
-gcold:统计gc时,老年区的状况
-gcoldcapacity:统计gc时,老年区heap容量
-gcpermcapacity:统计gc时,permanent区heap容量
-gcutil:统计gc时,heap状况
-printcompilation:不知道干什么的,一直没用过。
通常比较经常使用的几个参数是:
输出内容含义以下:
Loaded | Bytes | Unloaded | Bytes | Time |
49955 | 49701.5 | 35528 | 32456.1 | 34.71 |
49955 | 49701.5 | 35528 | 32456.1 | 34.71 |
49955 | 49701.5 | 35528 | 32456.1 | 34.71 |
49955 | 49701.5 | 35528 | 32456.1 | 34.71 |
49963 | 49708.8 | 35528 | 32456.1 | 34.71 |
49963 | 49708.8 | 35528 | 32456.1 | 34.71 |
49963 | 49708.8 | 35528 | 32456.1 | 34.71 |
49971 | 49716.1 | 35528 | 32456.1 | 34.71 |
49971 | 49716.1 | 35528 | 32456.1 | 34.71 |
49971 | 49716.1 | 35528 | 32456.1 | 34.71 |
jstat -gc 2083 2000 20(每隔2秒监控一次,共作10)
输出内容含义以下:
S0C | Current survivor(存活的) space 0 capacity (KB). |
EC | Current eden space capacity (KB). |
EU | Eden space utilization (KB). |
OC | Current old space capacity (KB). |
OU | Old space utilization (KB). |
PC | Current permanent space capacity (KB). |
PU | Permanent space utilization (KB). |
YGC | Number of young generation GC Events. |
YGCT | Young generation garbage collection time. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
监控内存使用状况 参数 (查看内存溢出相对有用)
jstat -gccause 2083 5000 (每隔5秒监控一次)
输出内容含义以下:
S0 | Survivor space 0 utilization as a percentage of the space's current capacity. |
S1 | Survivor space 1 utilization as a percentage of the space's current capacity. |
E | Eden space utilization as a percentage of the space's current capacity. |
O | Old space utilization as a percentage of the space's current capacity. |
P | Permanent space utilization as a percentage of the space's current capacity. |
YGC | Number of young generation GC events. |
YGCT | Young generation garbage collection time. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
LGCC | Cause of last Garbage Collection. |
GCC | Cause of current Garbage Collection. |
8、jvisualvm
java visualvm 是visualvm的一个针对java vm的发布版本。 关于visualvm的更多信息能够访问 visualvm.java.net.jvisualvm 工具从jdk 6 update7 (apple的java 是从 mac os x 10.5 update 4)以后,默认就已经存在jdk工具里。
java visualvm是一个稳定的工具,用每个jdk发布版本测试过。 最新的jdk请到oracle(sun)公司的网上进行下载。
jvisualvm 的功能及ui比jconsole还要强大。咱们先来看下jvisualvm的用法。 他是一个gui(图形界面)的工具,因此上手应该会很快。
官网上关于jvisualvm的用法介绍 http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html
简单来讲,咱们不须要传递任何参数就能够启动jvisualvm。
咱们能够把jvisualvm也放到jdk的path里, 而后加到环境的path里。 这时候咱们在windows的运行或者cmd里运行
jvisualvm就能够启动该工具了。 或者咱们直接双击点击该软件
在cmd中输入命令:jvisualvm 弹出下图
具体用法能够参考下面这个连接:http://www.iteye.com/topic/516447
下面咱们来说解如何利用visualvm对远程的主机进行监控
首先,咱们能够在用户目录下的任何地方(好比说:用户根目录,或者是jdk根目录)新建一个名称为jstatd.all.policy的文件,文件内容以下:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
新建完文件后,咱们给这个文件赋予执行权限,命令以下:
chmod 755 jstatd.all.policy
而后,咱们在咱们运行以下命令,启动jstatd服务(jstatd服务的默认端口为1099):
jstatd -J-Djava.security.policy=/sw/bes/jstatd.all.policy
记住jstatd.all.policy文件必须为绝对路径,防止出现java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)错误。
最后,咱们能够用jps命令查看是否启动成功:
jps -l
获得以下结果: