jdk的jps jstat jstack jmap jhat命令

在运维中经常会遇到查看tomcat进程、gc状态、线程dump heapdump来帮助我们分析问题。记录下


jps jstat jstack jmap jhat命令的使用方式

这些命令都是在jdk的bin目录下,如果未配置环境变量,需要到该目录下使用./命令 来执行。只能查看当前用户下的java进程。

1、jps:来查看java类的应用进程号,进程启动参数,进程类

[   ]$ ./jps  -------显示进程号和main方法
387146 Bootstrap
358177 Jps
[   ]$ ./jps -q -------只显示进程号
358191
387146
[   ]$ ./jps -m ----传递给main方法的参数
358206 Jps -m
387146 Bootstrap start
[   ]$ ./jps -l ----输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
387146 org.apache.catalina.startup.Bootstrap
358274 sun.tools.jps.Jps
[   ]$ ./jps -v ---输出传递给JVM的参数
358292 Jps -Dapplication.home=/wls/apache/tomcat/jdk1.7.0_67 -Xms8m
387146 Bootstrap -DserverName=tm_icp-coreSF001 -Xms1024M -Xmx1024M -XX:MaxNewSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:logs/gc.log -Dpafa.log.home=/wls/apache/applogs/tm_icp-coreSF001 -DJVM_DEFAULT_BIND_IP=10.21.5.191 -Dcatalina.base=/wls/apache/servers/tm_icp-coreSF001 -Dcatalina.home=/wls/apache/tomcat/apache-tomcat-7.0.53
[   ]$ ./jps -lmv 显示上面参数的组合
358307 sun.tools.jps.Jps -lmv -Dapplication.home=/wls/apache/tomcat/jdk1.7.0_67 -Xms8m
387146 org.apache.catalina.startup.Bootstrap start -DserverName=tm_icp-coreSF001 -Xms1024M -Xmx1024M -XX:MaxNewSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:logs/gc.log -Dpafa.log.home=/wls/apache/applogs/tm_icp-coreSF001 -DJVM_DEFAULT_BIND_IP=10.21.5.191 -Dcatalina.base=/wls/apache/servers/tm_icp-coreSF001 -Dcatalina.home=/wls/apache/tomcat/apache-tomcat-7.0.53


2、jstat 参数常用几个命令

./jstat -gcutil 387146  1000 5 打印heap信息,387146是pid 1000间隔时间毫秒,5是打印次数

S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT  
  0.00  18.87   9.19  20.21  59.97    787   18.788     6    1.815   20.604
  0.00  18.87   9.22  20.21  59.97    787   18.788     6    1.815   20.604
  0.00  18.87   9.23  20.21  59.97    787   18.788     6    1.815   20.604
  0.00  18.87   9.23  20.21  59.97    787   18.788     6    1.815   20.604
  0.00  18.87   9.30  20.21  59.97    787   18.788     6    1.815   20.604

 ./jstat -gc 387146 ----完整的gc信息

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT  
13056.0 13056.0  0.0   2463.5 104960.0 12596.7   917504.0   185470.0  180132.0 108017.4    787   18.788   6      1.815   20.604


jstat -options pid

可以列出当前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编译统计)


3、jstack 打印java的threaddump,配合ps -Lfp pid、top -Hp pid ps -mp pid -o THREAD,tid,time cmd来查询线程问题。如果运行在64位JVM上,可能需要指定-J-d64命令选项参数

printf "%x/n" 线程号,转换成dump中对应的十六进制线程号

     jstack pid #打印threaddump

    jstack  -l pid #会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况

   jstack -m pid #不仅会输出java堆栈信息,还会输出c/c++的堆栈信息


4、jmap打印java的heapdump,与jhat配合使用分析。如果运行在64位JVM上,可能需要指定-J-d64命令选项参数

jmap -premstat pid ---打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息

jmap -heap pid ----查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况

jmap -histo[:live] pid---查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象

jmap -dump:format=b,file=/tmp/dump.dat pid  ---用jmap把进程内存使用情况dump到文件中,再用jhat分析查看

5、dump出来的文件可以用jhat、MAT、VisualVM等工具查看

jhat -port 9998 /tmp/dump.dat ---jhat分析dump

注意:如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存,即jhat -J-Xmx512m -port 9998 /tmp/dump.dat。然后就可以在浏览器中输入主机地址:9998查看了




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值