java jdk详解_Java之jdk命令行工具详解

JPS---虚拟机进程状况工具

常用的参数:

-l 输出Java应用程序的main class的完整包

-q 仅显示pid,不显示其它任何相关信息

-m 输出传递给main方法的参数

-v 输出传递给JVM的参数。在诊断JVM相关问题的时候,这个参数可以查看JVM相关参数的设置

注:这个命令相信大多数java程序员都知晓、查找当前运行的java进程、当需要kill掉某个进程的时候可以用到。

bogon:~ chengluchao$ jps -l14064org.jetbrains.idea.maven.server.RemoteMavenServer14049

14082org.jetbrains.jps.cmdline.Launcher5036com.baiwang.UserServiceApplication14095 jdk.jcmd/sun.tools.jps.Jps

jstat ---虚拟机统计信息监视工具

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ] ,可以用来查看堆信息,垃圾回收信息等,详细使用命令可以通过man jstat命令来查看。

902c78dd01a11eace09e56fddb502b39.png

查看垃圾回收信息

212a949168dc3066c2390623a3933135.png

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC:年轻代中Eden(伊甸园)的容量 (字节)

EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC:Old代的容量 (字节)

OU:Old代目前已使用空间 (字节)

PC:Perm(持久代)的容量 (字节)

PU:Perm(持久代)目前已使用空间 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

NGCMN:年轻代(young)中初始化(最小)的大小 (字节)

NGCMX:年轻代(young)的最大容量 (字节)

NGC:年轻代(young)中当前的容量 (字节)

OGCMN:old代中初始化(最小)的大小 (字节)

OGCMX:old代的最大容量 (字节)

OGC:old代当前新生成的容量 (字节)

PGCMN:perm代中初始化(最小)的大小 (字节)

PGCMX:perm代的最大容量 (字节)

PGC:perm代当前新生成的容量 (字节)

S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

O:old代已使用的占当前容量百分比

P:perm代已使用的占当前容量百分比

S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)

S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)

ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)

DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)

TT: 持有次数限制

MTT : 最大持有次数限制

jinfo java配置信息工具

观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数、也可以设置参数的值,并使之立即生效。

22257607da40c88018a478294cdd0848.png

a63ce044fd1e0901828596d090764c77.png

jmap Java内存映像工具

可以生成java应用程序的堆快照和对象统计信息。

下面的命令可以看到java进程中某一时刻的类示例数量以及所占的字节数。

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

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

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

9b262c122af81a1baa44473c1422869f.png

也可以将当前程序的堆快照导出到文件中:

474004695b6c3d92fbbcc539f437bce7.png

jstack命令(Java Stack Trace)

可以用来查看java应用程序的堆栈信息。

jstack -l

可以用来查看进程中线程状态,检测死锁等。

jstack可以定位到线程堆栈,根据堆栈信息可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。

1.:先找出Java进程ID,我部署在服务器上的Java应用名称为mrf-center:

ps -ef | grep mrf -center | grep -v grep

1ee4020560d3f3d2d689d5ce3aef2177.png

得到进程ID为21711

2.:找出该进程内最耗费CPU的线程 top -Hp pid

ca0b64eaec7b1774046f3876efcb43dc.png

TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为21742的线程

printf"%x "21742得到21742的十六进制值为54ee,下面会用到。

3.:jstack上场、它用来输出进程21711的堆栈信息,然后根据线程ID的十六进制值grep,如下:

bbda873fa0185efc4f4cd5d3a3fd66de.png

http://mp.weixin.qq.com/s/C2lREdybWKP9-gqDu9yZkw

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值