jdk工具簡單學習

語言: CN / TW / HK

 

一、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

 

 

「其他文章」