http://guafei.iteye.com/blog/1815222 (jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令)
1、jps 命令:
jps [ options ] [ hostid ]
options选项
-q 仅输出VM标识符,不包括class name,jar name,arguments in main method
-m 输出main method的参数
-l 输出完全的包名,应用主类名,jar的完全路径名
-v 输出jvm参数
-V 输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-J 用于传递jvm选项到由javac调用的java加载器中,例如,“-J-Xms48m”将把启动内存设置为48M,使用-J选项可以非常方便的向基于Java的开发的底层虚拟机应用程序传递参数。
hostid 指定了目标的服务器,它的语法如下:
[protocol:][[//]hostname][:port][/servername]
protocol - 如果protocol及hostname都没有指定,那表示的是与当前环境相关的本地协议,如果指定了hostname却没有指定protocol,那么protocol的默认就是rmi。
hostname - 服务器的IP或者名称,没有指定则表示本机。
port - 远程rmi的端口,如果没有指定则默认为1099。
Servername - 注册到RMI注册中心中的jstatd的名称。
示例
不带任何参数
[root@localhost /]# jps
23501 Bootstrap
23709 Jps
带-v参数
[root@localhost /]# jps -v
23501 Bootstrap -Djava.util.logging.config.file=/opt/apache-tomcat-7.0.67/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Xms1024m -Xmx1024m -Xss1m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=256M -XX:MaxPermSize=512m -XX:+DisableExplicitGC -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.endorsed.dirs=/opt/apache-tomcat-7.0.67/endorsed -Dcatalina.base=/opt/apache-tomcat-7.0.67 -Dcatalina.home=/opt/apache-tomcat-7.0.67 -Djava.io.tmpdir=/opt/apache-tomcat-7.0.67/temp
23729 Jps -Denv.class.path=.:/usr/java/jdk1.7.0_75/lib:/usr/java/jdk1.7.0_75/jre/lib: -Dapplication.home=/usr/java/jdk1.7.0_75 -Xms8m
带-l参数
[root@localhost /]# jps -l
23501 org.apache.catalina.startup.Bootstrap
23751 sun.tools.jps.Jps
2、jstat命令 (jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令 参考)
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id(使用jps查看),和所选参数。参考格式如下:
jstat [ option vmid [ interval[s|ms] [count] ] ]
参数interval和count代表查询间隔和查询次数,可以列出当前JVM版本支持的选项,常见的有
l class (类加载器)
l compiler (JIT)
l gc (GC堆状态)
l gccapacity (各区大小)
l gccause (最近一次GC统计和原因)
l gcnew (新区统计)
l gcnewcapacity (新区大小)
l gcold (老区统计)
l gcoldcapacity (老区大小)
l gcpermcapacity (永久区大小)
l gcutil (GC统计汇总)
l printcompilation (HotSpot编译统计)
比如:jstat -gc java进程号
[root@localhost /]# jstat -gc 23915
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
65536.0 65536.0 0.0 50941.4 393216.0 354346.7 524288.0 17374.8 262144.0 51252.2 3 0.160 0 0.000 0.160
3、jinfo 命令
jinfo主要用来查看应用的配置参数,及打印JVM所指定的JVM参数;还可以使用 -sysprops 选项讲虚拟机进程中所指定的System.getProperties()内容打印出来;并可以查看到JVM参数的系统默认值,这个在jps -v是无法看到的;同时jinfo 还能在运行期修改JVM参数, 通过-flag name=value 或者 -flag [+|-]name 来修改一部分运行期可修改的JVM参数。
如果进程运行在64位虚拟机上,需要指明-J-d64参数,如:jinfo -J-d64 -sysprops pid另外,Java7的官方文档指出,这一命令在后续的版本中可能不再使用。笔者使用的版本(jdk8)中已经不支持该命令