是用于根据JAVA 本地方法,生成对应的c 语言头文件及相应的stub 文件的命令,使用比较简单,使用示例可以查看这篇文章:JNI 简单示例 , 包括 C 语言实现及调用
用来查看基于HotSpot JVM 里面所有进程的具体状态, 包括进程ID ,进程启动的路径等等。与unix 上的ps 类似,用来显示本地有权限的java 进程,可以查看本地运行着几个java 程序,并显示他们的进程号。使用jps 时,不需要传递进程号做为参数。
Jps 也可以显示远程系统上的JAVA 进程,这需要远程服务上开启了jstat 服务,以及RMI 注及服务,不过常用都是对本对的JAVA 进程的查看。
jps [ options ] [ hostid ]
-m 输出传递给main 方法的参数,如果是内嵌的JVM 则输出为null 。
-l 输出应用程序主类的完整包名,或者是应用程序JAR 文件的完整路径。
-v 输出传给JVM 的参数。
fenglibin@libin:~$ jps
11644 Main
1947
12843 Jps
fenglibin@libin:~$ jps -v
11644 Main -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:43467 -Dfile.encoding=GBK
1947 -Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx512m
12858 Jps -Denv.class.path=/home/fenglibin/java6/lib/dt.jar:/home/fenglibin/java6/lib/tools.jar::/usr/bin/libtool:/usr/bin/autoconf:/usr/local/BerkeleyDB.4.8/lib -Dapplication.home=/home/fenglibin/java6 -Xms8m
fenglibin@libin:~$ jps -l
11644 com.alibaba.china.webww.core.Main
12870 sun.tools.jps.Jps
1947
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 是非常有用的。
2 、命令格式
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 查询.
Jstat 是JDK 自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool ”,它位于java 的bin 目录下,主要利用JVM 内建的指令对Java 应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size 和垃圾回收状况的监控。可见,Jstat 是轻量级的、专门针对JVM 的工具,非常适用。由于JVM 内存设置较大,图中百分比变化不太明显一个极强的监视VM 内存工具。可以用来监视VM 内存内的各种堆和非堆的大小及其内存使用量。
jstat 工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id ,和所选参数。
它主要是用来显示GC 及PermGen 相关的信息,如果对GC 不怎么了解,先看这篇文章:http://blog.csdn.net/fenglibing/archive/2011/04/13/6321453.aspx ,否则其中即使你会使用jstat 这个命令,你也看不懂它的输出。
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
1 )、generalOption :单个的常用的命令行选项,如-help, -options, 或 -version 。
2 )、outputOptions :一个或多个输出选项,由单个的statOption 选项组件,可以-t, -h, and -J 选项配合使用。
statOption :
-class Option
-compiler Option
-gc Option
-gccapacity Option
-gccause Option
-gcnew Option
-gcnewcapacity Option
-gcold Option
-gcoldcapacity Option
-gcpermcapacity Option
-gcutil Option
-printcompilation Option
注:其中最常用的就是-gcutil 选项了,因为他能够给我们展示大致的GC 信息。
Option :指的是vmid 、显示间隔时间及间隔次数等
vmid — VM 的进程号,即当前运行的java 进程号
interval – 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
3 )、jstat 命令输出参数说明
S0 — Heap 上的 Survivor space 0 区已使用空间的百分比
S0C :S0 当前容量的大小
S0U :S0 已经使用的大小
S1 — Heap 上的 Survivor space 1 区已使用空间的百分比
S1C :S1 当前容量的大小
S1U :S1 已经使用的大小
E — Heap 上的 Eden space 区已使用空间的百分比
EC :Eden space 当前容量的大小
EU :Eden space 已经使用的大小
O — Heap 上的 Old space 区已使用空间的百分比
OC :Old space 当前容量的大小
OU :Old space 已经使用的大小
P — Perm space 区已使用空间的百分比
OC :Perm space 当前容量的大小
OU :Perm space 已经使用的大小
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT – 从应用程序启动到采样时 Young GC 所用的时间( 单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT – 从应用程序启动到采样时 Full GC 所用的时间( 单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间( 单位秒) ,它的值等于YGC+FGC
示例1 )、
示例2 ):
图中同时打印了young gc 和full gc 的总次数、总耗时。而,每次young gc 消耗的时间,可以用相间隔的两行YGCT 相减得到。每次full gc 消耗的时间,可以用相隔的两行FGCT 相减得到。例如红框中表示的第一行、第二行之间发生了1 次young gc ,消耗的时间为0.252-0.252 =0.0 秒。
常驻内存区(P) 的使用率,始终停留在64.21% 左右,说明常驻内存没有突变,比较正常。如果young gc 和full gc 能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java 内存释放情况正常,垃圾回收及时,java 内存泄露的几率就会大大降低。但也不能说明一定没有内存泄露。
示例3 )、
以上,介绍了Jstat 按百分比查看gc 情况的功能。其实,它还有功能,例如加载类信息统计功能、内存池信息统计功能等,那些是以绝对值的形式打印出来的,比较少用,在此就不做介绍。
示例4 )、jstat -class pid: 显示加载class 的数量,及所占空间等信息。
示例5 )、jstat -compiler pid: 显示VM 实时编译的数量等信息。
示例就不一一例举,有兴趣的可以自己尝试尝试。
打印出某个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.asp x )或与jhat (Java Heap Analysis Tool) 一起使用,能够以图像的形式直观的展示当前内存是否有问题。
64 位机上使用需要使用如下方式:
jmap -J-d64 -heap pid
SYNOPSIS
jmap [ option ] pid
jmap [ option ] executable core
jmap [ 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 )、基本参数:
-dump:[live,]format=b,file=<filename> 使用hprof 二进制形式, 输出jvm 的heap 内容到文件=. live 子选项是可选的,假如指定live 选项, 那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap 的概要信息,GC 使用的算法,heap 的配置及wise heap 的使用情况.
-histo[:live] 打印每个class 的实例数目, 内存占用, 类全名信息. VM 的内部类名字开头会加上前缀”* ”. 如果live 子参数加上后, 只统计活的对象数量.
-permstat 打印classload 和jvm heap 长久层的信息. 包含每个classloader 的名字, 活泼性, 地址, 父classloader 和加载的class 数量. 另外, 内部String 的数量和占用内存数也会打印出来.
-F 强迫. 在pid 没有相应的时候使用-dump 或者-histo 参数. 在这个模式下,live 子参数无效.
-h | -help 打印辅助信息
-J 传递参数给jmap 启动的jvm.
pid 需要被打印配相信息的java 进程id, 创业与打工的区别 - 博文预览, 可以用jps 查问.
1) 、[fenglb@ccbu-156-5 ~]$ jmap -histo 4939
[ 输出较多这里不贴了]
2 )、[fenglb@ccbu-156-5 ~]$ jmap -dump:format=b,file=test.bin 4939
Dumping heap to /home/fenglb/test.bin ...
Heap dump file created
可以输出并修改运行时的java 进程的opts 。用处比较简单,用于输出JAVA 系统参数及命令行参数。用法是jinfo -opt pid 如:查看2788 的MaxPerm 大小可以用 jinfo -flag MaxPermSize 2788 。
jconsole: 一个java GUI 监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM 。用java 写的GUI 程序,用来监控VM ,并可监控远程的VM ,非常易用,而且功能非常强。命令行里打 jconsole ,选则进程就可以了。
需要注意的就是在运行jconsole 之前,必须要先设置环境变量DISPLAY ,否则会报错误,Linux 下设置环境变量如下:
export DISPLAY=:0.0
[root@localhost bin]# jconsole
上两个图看一下:
可以这里选择查看本地进程的状况,还是远程进程的状况。
通过这张图可以看到内存、线程、类及CPU 使用的一些情况。
jvisualvm 同jconsole 都是一个基于图形化界面的、可以查看本地及远程的JAVA GUI 监控工具,Jvisualvm 同jconsole 的使用方式一样,直接在命令行打入Jvisualvm 即可启动,不过Jvisualvm 相比,界面更美观一些,数据更实时,上图为证:
Jhat 用于对JAVA heap 进行离线分析的工具,他可以对不同虚拟机中导出的heap 信息文件进行分析,如LINUX 上导出的文件可以拿到WINDOWS 上进行分析,可以查找诸如内存方面的问题,使用方式可以查看这篇文章:
http://blog.csdn.net/gtuu0123/archive/2010/11/27/6039474.aspx
不过jhat 和MAT 比较起来,就没有MAT 那么直观了,MAT 是以图形界面的方式展现结果,MAT 的使用方式可以参看文章:
http://blog.csdn.net/fenglibing/archive/2011/04/02/6298326.asp x
用来对core 文件和正在运行的Java 进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio 里面所带的dbx 非常相似,但 jdb 是专门用来针对Java 应用程序的。现在应该说日常的开发中很少用到JDB 了,因为现在的IDE 已经帮我们封装好了,如使用ECLIPSE 调用程序就是非常方便的,只要在非常特定的情况下可能会用到这个命令,如远程服务器的维护,没有IDE 进行调试,那这个时候JDB 应该可以帮上忙。