你好,我是阿光。
最近想著把工作中使用過的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和類名,jps
和 jps -V
的輸出是一樣的。這裡我本地執行了一個Java程序,啟動類是Main,並且指定了一些自定義的引數.
jps -m
16596 Main test=11 測試引數:a
18796 Jps -m
jps -l
16596 com.ggy.softman.Main
11836 jdk.jcmd/sun.tools.jps.Jps
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
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
命令。