美文网首页Java 虚拟机程序员
【Java 虚拟机笔记】jps 虚拟机进程状况工具相关整理

【Java 虚拟机笔记】jps 虚拟机进程状况工具相关整理

作者: 58bc06151329 | 来源:发表于2019-02-27 15:42 被阅读19次

    文前说明

    作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

    本文仅供学习交流使用,侵权必删。
    不用于商业目的,转载请注明出处。

    1. 虚拟机进程状况工具(JVM Process Status Tool)

    • jps 功能与 ps 命令类似,可以列出正在运行的 虚拟机进程,并显示虚拟机执行 主类名称 以及这些 进程的本地虚拟机唯一 ID(Local Virtual Machine Identifer,LVMID
      • 是使用频率最高的 JDK 命令行工具,因为其他的工具大多需要 LVMID 确定监控的虚拟机进程。
      • 该工具仅限于报告其 具有访问权限 的虚拟机进程的信息。
      • LVMID 通常与操作系统的进程 ID(Process Identifer,PID)一致(但也不一定一致),使用 Windows 的任务管理器或者 UNIX 的 ps 命令都可以查询到虚拟机进程的 LVMID,但是如果同时启动多个虚拟机进程,就需要 jps 命令显示主类的功能才能进行区分。
    • 可以通过 -J 方式,将虚拟机参数传递给 jps 调用的启动程序。例如 -J-Xms48m。

    1.1 命令格式

    • jps [ options ] [ hostid ]
      • options 是 命令行选项
      • hostid 是为其生成进程报告的主机的 主机标识符,是一个指示目标系统的字符串。
        • hostid 可以包括指示通信协议、端口号和其他具体实施数据。
        • hostid 字符串的语法在很大程度上与 URI 的语法相对应。
          • [protocol:][[//]hostname][:port][/servername]
            • protocol 是 通信协议。果省略了协议而未指定主机名,则默认协议是特定于平台、优化的本地协议。如果省略协议并指定主机名,则默认协议为 RMI。
            • hostname 表示 目标主机的主机名或 IP 地址。如果省略了主机名,那么目标主机就是本地主机。
            • port 表示 与远程服务器通信的默认端口。如果省略主机名或协议指定了优化的本地协议,则忽略端口。否则,处理端口参数是特定于实现的。对于默认的 RMI 协议,端口指示远程主机上 RMIRegistry 的端口号。如果省略端口和协议指示 RMI,然后使用默认的 RMIRegistry 端口(1099)。
            • servername 此参数的处理取决于实现。对于优化的本地协议,此字段将被忽略。对于 RMI 协议,此参数是表示 远程主机上的 RMI 远程对象的名称
        • 不指定的情况下运行 jps,将在 本地主机 上查找虚拟机进程。
    选项 说明
    -q 只生成本地虚拟机标识符列表。
    -m 输出传递给主方法(main 函数)的参数。对于嵌入的虚拟机输出可能为空。
    -l 输出应用程序主类的完整包名或应用程序 jar 文件的完整路径名。
    -v 输出传递给 Java 虚拟机的参数。
    -V 输出通过 flags 文件(.hotsoptrc 文件或 -xx:flags=<filename> 参数指定的文件)传递给 Java 虚拟机的参数。

    1.2 执行样例

    [root@localhost ~]# sudo -u ovirt jps -mlvV
    28823 /usr/share/jbossas/jboss-modules.jar -mp /var/lib/ovirt-engine/jboss_runtime/modules/00-ovirt-engine-modules:/var/lib/ovirt-engine/jboss_runtime/modules/01-jbossas-modules -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -c ovirt-engine.xml -XX:+TieredCompilation -Xms1g -Xmx1g -XX:PermSize=256m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.awt.headless=true -Djsse.enableSNIExtension=false -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/ovirt-engine/dump -Djava.util.logging.manager=org.jboss.logmanager -Dlogging.configuration=file:///var/lib/ovirt-engine/jboss_runtime/config/ovirt-engine-logging.properties -Dorg.jboss.resolver.warning=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djboss.modules.write-indexes=false -Djboss.server.default.config=ovirt-engine -Djboss.home.dir=/usr/share/jbossas -Djboss.server.base.dir=/usr/share/ovirt-engine -Djboss.server.data.dir=/var/lib/ovirt-engine -Djboss.server.log.dir=/var/log/ovirt-engine -Djboss.server.config.dir=/var/lib/ovirt-engine/jboss_runtime/config -Djboss.server.temp.dir=/var/lib/ovirt-engine/jboss_runtime/tmp -Djboss.controller.temp.dir=/var/lib/ovirt-engine/jboss_runtime/tmp
    

    1.3 输出格式

    • lvmid [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]
      • 建议不要编写脚本来解析 jps 输出,因为在将来的版本中格式可能会改变。

    1.4 实现机制

    • Java 程序启动,在 java.io.tmpdir 指定的目录(临时文件夹)里,生成一个类似于 hsperfdata_User 的文件夹,这个文件夹里(在 Linux 中为 /tmp/hsperfdata_{userName}/)有一些文件,这些文件的名字就是 Java 进程的 pid。通过解析每个文件,就可以获得系统的参数等。

    相关文章

      网友评论

        本文标题:【Java 虚拟机笔记】jps 虚拟机进程状况工具相关整理

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