Juconcurrent 学而不思则罔,思而不学则殆。

jdk工具-jps

2019-02-22

简介

jps,英文为”Java Virtual Machine Process Status Tool”,中文可翻译成”Java虚拟机进程状态工具”。jps的作用主要是查看有权访问Hotspot虚拟机的进程。

我们可以使用jps -help命令列出其主要语法,如下所示:

usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]

基本用法

  1. 不带任何参数,默认列出进程pid和简单的class或jar名称

不带任何参数

  1. -q,仅显示进程编号,不显示class、jar及传入参数等其他信息.

参数,-q

  1. -m,输出main()函数传入的参数

参数,-m

  1. -l,输出应用程序主类的完整package名称或完整jar名称.

参数,-l

  1. -v,列出jvm参数。如:-Xms20m -Xmx50m,是启动程序时所指定的jvm参数

参数,-v

  1. -V:输出通过.hotsportrc或-XX:Flags=指定的jvm参数

暂无例子

获取远程物理机的jps信息

jps除了查看本机jvm进程的信息之外,还可以查看远程物理机的jvm进程信息。要想远程查看jps信息,需要在远程物理机上启动jstatd服务。

那么,如何启动呢?

第一步,启动jstatd需要足够的权限,因此我们需要基于java的安全策略分配相应的权限。在{JAVA_HOME}/bin/目录下创建jstatd.all.policy策略文件,输入如下信息:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
}

第二步,通过下述命令启动jstatd

jstatd -J-Djava.security.policy=jstatd.all.policy

第三步,默认情况下,jstatd启动的端口为1099,若想指定端口,需要加上-p参数。另外,我们可以使用netstat命令查看jstatd启动之后的端口号

# 指定端口
jstatd -J-Djava.security.policy=jstatd.all.policy -p 9030
# 查看jstatd启动后的端口
netstat -apn | grep jstatd

jps实现原理

Java程序在启动以后,会在java.io.tmpdir所在的目录下,生成一个类似于hsperfdata_{User}的文件夹,这个文件夹里面有几个文件,名称就是Java进程的pid。因此,要想列出当前运行的Java进程,只需要将这个目录下的文件名遍历一下即可。 至于系统的参数等信息,则需要解析这几个文件的内容才能获得。

【注意】:

  1. java.io.tmpdir所在的目录即为临时文件夹
  2. hsperfdata_{User}文件夹在Linux和Windows下分别如下
    • Linux:/tmp/hsperfdata_{userName}/
    • Windows:C:\Users\{userName}\AppData\Local\Temp\hsperfdata_{userName}

linux演示

Windows演示

总结

通过这篇文章,我们对jps有了一个清晰直观的了解,基本掌握了其语法及使用。在最后,我们给出了jps的实现原理。

参考链接

  • https://www.cnblogs.com/tulianghui/p/5914535.html
  • https://www.jianshu.com/p/d39b2e208e72
  • https://blog.csdn.net/gtuu0123/article/details/6025484
  • https://www.jianshu.com/p/d39b2e208e72
  • https://www.jianshu.com/p/9f70a980e40a

下一篇 jdk工具-jstat

Content