java 程序故障常用排查工具

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)中已经不支持该命令

 

 

 

猜你喜欢

转载自yjph83.iteye.com/blog/2292923