jdk工具-jps

作者: juconcurrent | 来源:发表于2019-02-23 00:20 被阅读2次

    简介

    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=<filename>指定的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的实现原理。

    参考链接

    相关文章

      网友评论

        本文标题:jdk工具-jps

        本文链接:https://www.haomeiwen.com/subject/voiyyqtx.html