日期:2014-05-16 浏览次数:20413 次
在开始介绍之前,先介绍几篇写的比较详细的博客,咱们不求最精,一定最全,最省事。
http://blog.csdn.net/fenglibing/article/details/6411924
一、jstatd
启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。
实例:jstatd -J-Djava.security.policy=my.policy
my.policy文件需要自己建立,内如如下:
这是安全策略文件,因为jdk对jvm做了jaas的安全检测,所以我们必须设置一些策略,使得jstatd被允许作网络操作
二、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
三、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进程号] 弹出下图
四、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 connec