一、jps
1.概念
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一個顯示當前所有java進程pid的命令,簡單實用,非常適合在linux/unix平臺上簡單察看當前java進程的一些簡單情況。
jps的作用是顯示當前系統的java進程情況,及其id號;我們可以通過它來查看我們到底啓動了幾個java進程(因爲每一個java程序都會獨佔一個java虛擬機實例),和他們的進程號(爲下面幾個程序做準備)。
**使用方法:**在當前命令行下打 jps(需要JAVA_HOME,沒有的話,到改程序的目錄下打) 。
jps存放在JAVA_HOME/bin/jps,使用時爲了方便請將JAVA_HOME/bin/加入到Path。
注意事項:jps命令有個地方很不好,似乎只能顯示當前用戶的java進程,要顯示其他用戶的還是隻能用unix/linux的ps命令。
2.舉例
[root@VM_0_14_centos ~]# jps
28000 Jps
3607 start.jar
比較常用的參數:
-q 只顯示pid,不顯示class名稱,jar文件名和傳遞給main 方法的參數
LiWeideMacBook-Pro:~ liweihan$ jps -q
8160
9859
9860
9861
29750
8538
-m 輸出傳遞給main 方法的參數,在嵌入式jvm上可能是null
[root@VM_0_14_centos ~]# jps -m
3607 start.jar jetty.state=/usr/local/jetty/jetty.state jetty-logging.xml jetty-started.xml
29503 Jps -m
-l 輸出應用程序main class的完整package名 或者 應用程序的jar文件完整路徑名
[root@VM_0_14_centos ~]# jps -l
29826 sun.tools.jps.Jps
3607 /usr/local/jetty/start.jar
-v 輸出傳遞給JVM的參數
[root@VM_0_14_centos ~]# jps -v
3607 start.jar -Xms256m -Xmx256m -Djetty.logging.dir=/usr/local/jetty/logs -Djetty.home=/usr/local/jetty -Djetty.base=/usr/local/jetty -Djava.io.tmpdir=/tmp
29900 Jps -Dapplication.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64 -Xms8m
3.總結
我們常用 jps -l 命令。
二、jstat
1.概念
Jstat用於監控基於HotSpot的JVM,對其堆的使用情況進行實時的命令行的統計,使用jstat我們可以對指定的JVM做如下監控:
- 類的加載及卸載情況
- 查看新生代、老生代及持久代的容量及使用情況
- 查看新生代、老生代及持久代的垃圾收集情況,包括垃圾回收的次數及垃圾回收所佔用的時間
- 查看新生代中Eden區及Survior區中容量及分配情況等
jstat工具特別強大,它有衆多的可選項,通過提供多種不同的監控維度,使我們可以從不同的維度來了解到當前JVM堆的使用情況。詳細查看堆內各個部分的使用量,使用的時候必須加上待統計的Java進程號,可選的不同維度參數以及可選的統計頻率參數。
2.舉例
《1.》類加載情況的統計
jstat -class pid
列名 | 說明 |
---|---|
Loaded | 加載了的類的數量 |
Bytes | 加載了的類的大小,單爲Kb |
Unloaded | 卸載了的類的數量 |
Bytes | 卸載了的類的大小,單爲Kb |
Time | 花在類的加載及卸載的時間 |
獲取pid:3607
[root@VM_0_14_centos ~]# jps -l
31510 sun.tools.jps.Jps
3607 /usr/local/jetty/start.jar
類加載情況統計
[root@VM_0_14_centos ~]# jstat -class 3607
Loaded Bytes Unloaded Bytes Time
8426 18562.5 40 86.4 8.42
《2.》編譯器編譯情況的統計
jstat -compiler pid
列名 | 說明 |
---|---|
Compiled | 編譯任務執行的次數 |
Failed | 編譯任務執行失敗的次數 |
Invalid | 編譯任務非法執行的次數 |
Time | 執行編譯花費的時間 |
FailedType | 最後一次編譯失敗的編譯類型 |
FailedMethod | 最後一次編譯失敗的類名及方法名 |
[root@VM_0_14_centos ~]# jstat -compiler 3607
Compiled Failed Invalid Time FailedType FailedMethod
19872 2 0 168.94 1 org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding computeId