Java進程狀況之 jps 命令

 JDK 中的 jps 命令 沿用了同樣的概念:它將打印所有正在運行的 Java 進程的相關信息。

一、概要

jps [-q] [-mlvV] [<hostid>]
jps [-help]
  • -q
     僅輸出進程號。
  • -mlvV
    • -m 輸出啓動進程時傳遞給主類 main() 函數的參數。
    • -l 輸出應用程序主類的完整包名或應用程序 jar 文件的完整路徑名。
    • -v 輸出傳遞給 JVM 的參數。
    • -V (默認)輸出進程標識號、主類名。
  • hostid
     應爲其生成流程報告的主機的標識符。hostid 可以包括可選組件,這些組件指示通信協議、端口號和其他特定於實現的數據。請參見主機標識符。
  • -help
     顯示 jps 命令的幫助信息。

二、說明

jps命令列出了目標系統上已檢測的 Java HotSpot 虛擬機。該命令僅限於報告它擁有訪問權限的虛擬機的信息。

注意:JDK 10 增加了在附加到運行在獨立備審進程中的 Java 進程時使用附加應用編程接口的支持。然而,jps 工具看不到 JVM 進程在單獨的 docker 實例中運行。如果您試圖將一個 Linux 主機與一個 docker 容器中的虛擬機連接起來,您必須使用諸如 ps 之類的工具來查找 JVM 的 PID,然後在接受該 PID 的工具的命令行上指定該 PID。

 如果 jps 命令在沒有指定 hostid 的情況下運行,那麼它會在本地主機上搜索已檢測的 JVM。如果從主機 id 開始,它將使用指定的協議和端口在指定的主機上搜索 JVM。假設 jstatd 進程正在目標主機上運行。
jps命令爲在目標系統上找到的每個已檢測的 JVM 報告本地 JVM 標識符或 lvmid。lvmid 通常是但不一定是操作系統的 JVM 進程標識符。在沒有選項的情況下,jps命令列出了每個 Java 應用程序的 lvmid,後跟應用程序類名或 JAR 文件名的縮寫。類名或 JAR 文件名的縮寫省略了類的包信息或 JAR 文件路徑信息。
jps命令使用 Java 啓動器查找傳遞給主方法的類名和參數。如果目標 JVM 是用自定義啓動器啓動的,那麼類或 JAR 文件名以及主方法的參數都不可用。在這種情況下,jps命令輸出類名或 jar 文件名以及主方法參數的未知字符串。
jps命令生成的 JVM 列表可能會受到授予運行該命令的主體的權限的限制。該命令僅列出主體擁有由操作系統特定訪問控制機制確定的訪問權限的 JVM。

三、節點標識

 節點標識或 hostid 是指示目標系統的字符串。hostid 字符串的語法對應於 URI 的語法:

[protocol:][[//]hostname][:port][/servername]
  • protocol
     通信協議。如果省略了該協議並且沒有指定主機名,則默認協議是特定於平臺的優化本地協議。如果省略協議並指定主機名,則默認協議是 rmi。
  • hostname
     指示目標主機的主機名或IP地址。如果省略主機名參數,則目標主機是本地主機。
  • port
     與遠程服務器通信的默認端口。如果省略主機名參數或協議參數指定了優化的本地協議,則端口參數將被忽略。否則,端口參數的處理是特定於實現的。對於默認 rmi 協議,端口參數指示遠程主機上 RMI 註冊表的端口號。如果端口參數被省略,並且協議參數指示 rmi,則使用默認 rmiregistry 端口(1099)。
  • servername
     該參數的處理取決於實現。對於優化的本地協議,此字段被忽略。對於 rmi 協議,該參數是一個字符串,表示遠程主機上 RMI 遠程對象的名稱。請參見 jstatd 命令 -n 選項。

四、輸出格式

jps命令的輸出具有以下模式:

lvmid [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]

 所有輸出標記都用空格隔開。當試圖將參數映射到它們的實際位置參數時,包含嵌入空格的 arg 值會引入歧義。

注意:建議您不要編寫腳本來解析 jps 的輸出,因爲格式在將來的版本中可能會改變。如果您編寫了解析 jps 輸出的腳本,那麼應該爲該工具的未來版本修改它們。

五、示例

 列出本地主機上已檢測的虛擬機:

jps
18027 Java2Demo.JAR
18032 jps
18005 jstat

 以下示例列出了遠程主機上已檢測的 JVM。本示例假設 jstat 服務器及其內部RMI註冊表或單獨的外部 rmiregistry 進程正在默認端口(端口1099)上的遠程主機上運行。它還假設本地主機具有訪問遠程主機的適當權限。這個例子包括 -l 選項來輸出長形式的類名或 jar 文件名。

jps -l remote.domain
3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
2857 sun.tools.jstatd.jstatd

 下面的示例列出了遠程主機上的儀表化 JVM,遠程主機具有 RMI 註冊表的非默認端口。本示例假設 jstatd 服務器正在遠程主機上運行,內部 RMI 註冊表綁定到端口 2002。此示例還使用 -m 選項來包含傳遞給每個列出的 Java 應用程序的 main 方法的參數。

jps -m remote.domain:2002
3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
3102 sun.tools.jstatd.jstatd -p 2002
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章