(转)Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm
在开始介绍之前,先介绍几篇写的比较详细的博客,咱们不求最精,一定最全,最省事。
http://blog.csdn.net/fenglibing/article/details/6411924
一、jstatd
启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。
实例:jstatd -J-Djava.security.policy=my.policy
my.policy文件需要自己建立,内如如下:




四、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
五、jstack
该命令应该如何使用呢?首先需要用jstack命令产生java进程的dump文件,然后分析dump文件中的数据,下面的连接是一篇讲述如何分析jstack产生的dump文件数据的文章,写的非常不错:
http://www.blogjava.net/jzone/articles/303979.html
命令格式:
jstack [ option ] pid
基本参数:
-F当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m打印java和native c/c++框架的所有栈信息.
-h | -help打印帮助信息
pid 需要被打印配置信息的java进程id,可以用jps查询.
具体用法
jstack -l 进程ID
六、jmap(linux下特有,也是很常用的一个命令)
观察运行中的jvm物理内存的占用情况。
Usage:
??? jmap [option] <pid>
??????? (to connect to running process)
??? jmap [option] <executable <core>
??????? (to connect to a core file)
??? jmap [option] [server_id@]<remote server IP or hostname>
??????? (to connect to remote debug server)
where <option> is one of:
??? <none>?????????????? to print same info as Solaris pmap
??? -heap??????????????? to print java heap summary
??? -histo[:live]??????? to print histogram of java object heap; if the "live"
???????????????????????? suboption is specified, only count live objects
??? -permstat??????????? to print permanent generation statistics
??? -finalizerinfo?????? to print information on objects awaiting finalization
??? -dump:<dump-options> to dump java heap in hprof binary format
???????????????????????? dump-options:
?????????????????????????? live???????? dump only live objects; if not specified,
??????????????????????????????????????? all objects in the heap are dumped.
?????????????????????????? format=b???? binary format
?????????????????????????? file=<file>? dump heap to <file>
???????????????????????? Example: jmap -dump:live,format=b,file=heap.bin <pid>
??? -F?????????????????? force. Use with -dump:<dump-options> <pid> or -histo
???????????????????????? to force a heap dump or histogram when <pid> does not
???????????????????????? respond. The "live" suboption is not supported
???????????????????????? in this mode.
??? -h | -help?????????? to print this help message
??? -J<flag>???????????? to pass <flag> directly to the runtime system
参数如下:
-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”,得到如下结果:
具体用法可以参考下面这个链接:http://www.iteye.com/topic/516447
下面我们来讲解如何利用visualvm对远程的主机进行监控
首先,我们可以在用户目录下的任何地方(比如说:用户根目录,或者是jdk根目录)新建一个名称为jstatd.all.policy的文件,文件内容如下:
- jps?-l??
得到如下结果: