必知必會Java命令-jps

2023-12-10 18:02:06

你好,我是阿光。

最近想著把工作中使用過的java命令都梳理一下,方便日後查閱。雖然這類文章很多,但自己梳理總結後,還是會有一些新的收穫。這也是這篇筆記的由來。

今天先聊聊 jps 命令。

命令概述⭐

jps命令是JDK提供的一個工具,用於檢視目標系統上的Java程序基本資訊(程序ID, 啟動類,啟動引數等)。命令在JDK安裝目錄的bin目錄下,比如在我的window下D:\Java\jdk1.8.0\bin\jps.exe。但JRE沒有提供這個命令。不過從Java9模組化開始,已經不區分JDK和JRE了。

這個命令只會檢測到目標系統上HotSpot版本的,具有存取許可權的JVM資訊。

命令的官方檔案可檢視這個地址The jps Command (oracle.com)

命令用法⛵

我的演示環境是在window11, jdk17版本下

我們可以通過jps -h 或者 jps --help 或者 jps -help檢視這個命令的基本用法:

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

Definitions:
    <hostid>:      <hostname>[:<port>]
    -? -h --help -help: Print this help message and exit.

中括號裡的選項都是可選的,最簡單的就是jps

jps
35936 Jps
1076  RemoteMavenServer36

這裡沒有指定主機,所以只會查詢本地主機上的JVM。第一列是程序ID,第二列是啟動類名。可以看到,jps命令本身也是一個Java程序,它的啟動類是Jps。

-q選項會讓命令只輸出程序ID,如下:

jps -q
35936
1076

-mlvV選項可以任意指定一個,也可以同時指定多個,它們可以隨意組合。

  • -m 選項會顯示傳遞給main方法的引數,即程式自定義的一些引數。
  • -l 選項會顯示啟動類的完整包名稱或者啟動JAR的完整路徑名。
  • -v 選項會顯示傳遞給虛擬機器器的引數,比如-Dxxx=v形式指定的引數,-Xms128M引數等。
  • -V 大V選項只會輸出PID和類名,jpsjps -V的輸出是一樣的。

這裡我本地執行了一個Java程序,啟動類是Main,並且指定了一些自定義的引數.

  1. 列出main方法引數:jps -m
jps -m
16596 Main test=11 測試引數:a
18796 Jps -m
  1. 列出啟動類全名:jps -l
jps -l
16596 com.ggy.softman.Main
11836 jdk.jcmd/sun.tools.jps.Jps
  1. 列出虛擬機器器引數:jps -v
jps -v
29716 Main -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8
11388 Jps -Dapplication.home=D:\Java\jdk-17.0.6.10 -Xms8m -Djdk.module.main=jdk.jcmd
  1. 組合命令,輸出資訊更豐富:jps -lmv
jps -lmv
31948 com.ggy.softman.Main test=11 測試引數:a -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8
29008 jdk.jcmd/sun.tools.jps.Jps -lmv -Dapplication.home=D:\Java\jdk-17.0.6.10 -Xms8m -Djdk.module.main=jdk.jcmd

該命令也可以顯示遠端主機的Java程序資訊,只要在命令的最後帶上hostid。這種情況基本使用很少,這裡也沒演示了,可以檢視官網檔案。

連線遠端主機時,遠端主機上必須執行jstatd命令。

使用場景