文章目錄
- 一、簡介
- 二、常用命令
- 1、jps
- 2、jps -l
- 3、jps -q
- 4、jps -m
- 5、jps -v
- 6、jps失效
一、簡介
JVM Process Status Tool,顯示指定系統內所有的HotSpot虛擬機進程。
功能:
顯示當前所有java進程pid的命令,我們可以通過這個命令來查看到底啟動了幾個java進程(因為每一個java程序都會獨占一個java虛擬機實例)。
缺點:
不過jps有個缺點是只能顯示當前用戶的進程id,要顯示其他用戶的還只能用linux的ps命令。
jps -help
輸出結果:
root@yzh-zabbix-server:bin #jps -help
usage: jps [-help]jps [-q] [-mlvV] [<hostid>]Definitions:<hostid>: <hostname>[:<port>]
命令格式:
jps [options] [hostid]
option參數:
參數 | 說明 |
---|---|
-l | 輸出主類全名或jar路徑 |
-q | 只輸出LVMID |
-m | 輸出JVM啟動時傳遞給main()的參數 |
-v | 輸出JVM啟動時顯示指定的JVM參數 |
其中
[option]
、[hostid]
參數也可以不寫。
二、常用命令
1、jps
列出所有正在運行的java進程,其中jps命令也是一個java程序,前面的數字就是對應的進程id。
jps
輸出結果:
root@yzh-zabbix-server:bin #jps
2153 Bootstrap
2697 Jps
2、jps -l
輸出應用程序main.class的完整package名或者應用程序jar文件完整路徑名。
jps -l
輸出結果:
root@yzh-zabbix-server:bin #jps -l
2496 sun.tools.jps.Jps
2153 org.apache.catalina.startup.Bootstrap
3、jps -q
只輸出LVMID。
jps -q
輸出結果:
1282
24034
7763
24035
7765
45529
427
10174
4、jps -m
輸出JVM啟動時傳遞給main()的參數。
jps -m
輸出結果:
10256 Jps -m
1282
24034 RemoteMavenServer36
7763 Launcher /Applications/IntelliJ IDEA.app/Contents/lib/netty-common-4.1.52.Final.jar:/Applications/IntelliJ IDEA.app/Contents/lib/netty-resolver-4.1.52.Final.jar:/Applications/IntelliJ
24035 RemoteMavenServer36
7765 Bootstrap start
45529
427
5、jps -v
輸出傳遞給JVM的參數。
jps -v
輸出結果:
root@yzh-zabbix-server:bin #jps -v
2153 Bootstrap -Djava.util.logging.config.file=/data/livy/zhengzhouyh/apache-tomcat-7.0.87/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -javaagent:/data/livy/zhengzhouyh/JavaAgent_2.7.0_zzbank/lib/agent.jar -Djava.rmi.server.hostname=10.0.1.21 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dignore.endorsed.dirs= -Dcatalina.base=/data/livy/zhengzhouyh/apache-tomcat-7.0.87 -Dcatalina.home=/data/livy/zhengzhouyh/apache-tomcat-7.0.87 -Djava.io.tmpdir=/data/livy/zhengzhouyh/apache-tomcat-7.0.87/temp -agentpath:/opt/dynatrace/oneagent/agent/lib64/liboneagentloader.so=loglevelcon=none,tenant=qng16405,tenanttoken=VpaYLCqHrkVjEFBd,server=https://sg-us-west-2-34-214-95-212-prod16-oregon.live.ruxit.com/communication;https://sg-us-west-2-34-208-246-192-prod16-oregon.live.ruxit.com/communication;https://sg-us-west-2-35-161-237-123-prod16-
2860 Jps -Dapplication.home=/usr/local/jdk1.8.0_144 -Xms8m
6、jps失效
我們在定位問題過程會遇到這樣一種情況,用 jps
查看不到進程id,用 ps -ef | grep java
卻能看到啟動的java進程。
要解釋這種現象,先來了解下 jps
的實現機制:
java程序啟動后,會在目錄 /tmp/hsperfdata_{userName}/
下生成幾個文件,文件名就是java進程的 pid
,因此jps列出進程id就是把這個目錄下的文件名列一下而已,至于系統參數,則是讀取文件中的內容。
我們來思考下:
-
由于磁盤滿了,無法創建這些文件;
-
用戶對這些文件沒有讀的權限;
-
因為某種原因這些文件或者目錄被清除;
出現以上這些情況,就會導致jps命令失效。
如果jps命令失效,而我們又要獲取pid,還可以使用以下兩種方法:
top | grep java
ps -ef |grep java