Java内置工具包tools.jar(一)sun.tools.jstack.Jps

 我们知道,在JAVA_HOME/bin下有诸多内置命令,是我们在使用Java或者监控、排查它时用到的命令。其中tools.jar中包含了大多数命令的执行入口。后面我将写一系列对这些命令的实现细节的文章,使用方法文本不做讨论。

        jps命令是java开发人员最常用的命令之一,它输出了当前用户下java进程的一些基本信息。我们从jps开始阅读,它的入口在sun.tools.jstack.Jps中。

        在参数校验逻辑之后,获取到jps命令中监控的目标机,然后从中拿到目标机中可用的jvm进程。

HostIdentifier hostId = arguments.hostId();
MonitoredHost monitoredHost = MonitoredHost.getMonitoredHost(hostId);

// get the set active JVMs on the specified host.
Set jvms = monitoredHost.activeVms();

        MonitoredHost监控的目标机可以是本地进程,也可以是通过RMI远程调用的进程。

003155_RtAr_859433.png

获取到监控主机之后就要获取运行列表,这里是jps的数据来源,我们local模式为例,在MonitoredHostProvider#activeVms中获取的数据来源于这样一行代码:

PerfDataFile.getLocalVmId(paramX));

而paramX是根据用户名和一定规则拼凑起来得到:

tmpDirName + dirNamePrefix + user + File.separator;

tmpDirName取自String tmpdir = System.getProperty("java.io.tmpdir"); 参考初始化参数:-Djava.io.tmpdir。默认为

dirNamePrefix 为固定值:hsperfdata_

以admin角色为例最终得到/tmp/hsperfdata_xxx目录。顺藤摸瓜,直接到这个地址下瞧一瞧发现真有这么几个文件夹。

004348_wOhX_859433.png

打开后发现里面的文件均为进程号,文件内容较多,但是可阅读,是一些启动参数、运行信息等。那么hsperfdata_xxx文件是干哈的?它是JVM Performance Counters的一部分,jvmstat通过文件的方式记录了进程在运行时刻的一些性能或运行信息。

了解到文件内容之后我们接着看Jps的代码,jps根据输入的参数对文件内容进行格式化输出,简而言之就是根据不同的选项对性能信息进行过滤。

至此,jps的命令结束。其他类似的性能监控工具如jconsole、jvisualvm的部分数据来源均为hsperfdata_xxx文件。

 

附:

jps无效处理:不知道大家有没有遇到过jps无效的情况,如“pid-- process information unavailable”。通过上面的内容了解到jps的数据来源为hsperfdata_xxx文件夹,jps无效多数原因与此文件或文件夹的权限、大小、磁盘空间等问题有关,希望这个信息能够提供一些思路。

 

https://zeroproductionincidents.wordpress.com/tag/jvm-performance-counters/

转载于:https://my.oschina.net/u/859433/blog/795122

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值