Java命令行工具简介

Java profiling虽然已经有了youkit、jprofile等工具,但是这些工具一般不会在生产环境使用,线上遇到问题,最简单直接的还是使用jdk自带的命令行工具进行问题定位。另外,对于线上的监控,可以写个一个定时脚本,不断执行相关命令,将结果发送到opentsdb,做监控(当然,你也可以在生产环境起jstatd服务)。


下面简单介绍几个命令

1,jps

这个命令是最基础的命令了,它的作用和ps -ef | grep java相当,是进行问题排查的入口。但是针对java进程,可能比ps更好用(这一点我不是很确定,没有深入看过ps命令)。其使用方式如下
jps -l


在我个人的centos虚拟机上,执行结果如下


前面数字是pid,后面是主类的全名
jps可以不带参数使用,可支持的参数如下

选项 作用
-q  
-m 输出进程启动时传递给main的参数,比如jps -m中的-m
-l 输出进程主类全名称,比如sun.tools.jps.Jps
-v 输出进程启动时的JVM参数,比如-Xms8m


2,jstat
可以查看java进程的类加载、gc等信息

查看GC情况可以使用jstat -gc 3731 1000 20,其通用模式是 jstat [option] [pid] [timeinterval] [times]

上面的命令表示查看pid为3731的进程gc情况,1000为时间间隔,单位毫秒,20是次数

在我个人的centosx虚拟机上,执行结果如下

其中S0C, S1C,表示新生代两个Survivor区的容量,EC表示Eden区容量,OC表示老年代容量,MC(我的jdk版本为1.8,1.8一起为PC)表示持久代容量。

jstat另外支持其他一些参数,分别实现不同功能。

3,jstack

这个命令可以生成线程快照,同样是在我本人的centos虚机上执行命令,得到的结果如下

如此,通过上面三个简单的命令,已经可以达到查看GC和线程状态的目的。最后补充一句,性能优化和问题排查是个很系统化的工作,做好监控和告警,是定位问题最有效的手段。

猜你喜欢

转载自economist.iteye.com/blog/2324487