一.JAVA虛擬機工具
JDK 本身提供了很多方便的 JVM 性能調優監控工具,除了 jps、jstat、jinfo、jmap、jhat、jstack 等小巧的工具,還有集成式的 jvisualvm 和 jconsole。
1.jps
jps(JVM Process Status Tool,虛擬機進程監控工具),這個命令可以列出正在運行的虛擬機進程,并顯示虛擬機執行主類名稱,以及這些進程的本地虛擬機唯一 ID。這個 ID 被稱為本地虛擬機唯一 ID(local virtual machine Identifier,簡寫為LVMID)。如果你在 linux 的一臺服務器上使用 jps 得到的 LVMID 其實就是和 ps 命令得到的 PID 是一樣的。
語法格式如下:
jps [options] [hostid]
如果不指定hostid就默認為當前主機或服務器。
options參數選項說明如下:
-q 不輸出類名、Jar名和傳入main方法的參數 -m 輸出傳入main方法的參數 -l 輸出main類或Jar的全限名 -v 輸出傳入JVM的參數
使用(查看所有java進程)
jps -lv
示例:
[root@chengchi ~]# jps 24804 Jps 1862 mango.jar [root@chengchi ~]# jps -lv 24787 sun.tools.jps.Jps -DApplication.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64 -Xms8m 1862 /home/www/api.chengchijinfu.com/mango_server/target/mango.jar -Dserver.port=8080 -Dspring.profiles.active=prod
2.jstat
jstat(JVM Statistics Monitoring Tool,虛擬機統計信息監視工具),這個命令用于監視虛擬機各種運行狀態信息。它可以顯示本地或者遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,雖然沒有GUI圖形界面,只是提供了純文本控制臺環境的服務器上,但它是運行期間定位虛擬機性能問題的首選工具。
語法格式如下:
jstat [option vmid [interval [s | ms] [count ] ] ]
例如:需要每 1000 毫秒查詢一次進程 16418 垃圾收集狀況,一共查詢 10 次,那命令如下:
3.jinfo
jinfo (Configuration Info for Java,配置信息工具) 這個命令可以實時地查看和調整虛擬機各項參數。
查看2788的MaxPerm大小可以用
[root@Bill-8 bin]# jinfo -flag MaxPermSize 2788 -XX:MaxPermSize=134217728
4.jmap
jmap(Memory Map for Java,內存映像工具),用于生成堆轉存的快照,一般是 heapdump 或者 dump 文件。如果不適用 jmap 命令,可以使用 -XX:+HeapDumpOnOutOfMemoryError 參數,當虛擬機發生內存溢出的時候可以產生快照。或者使用kill -3 pid也可以產生。jmap 的作用并不僅僅是為了獲取 dump 文件,它可以查詢 finalize 執行隊列,java 堆和永久代的詳細信息,如空間使用率,當前用的哪種收集器。
jmap的命令格式:
jmap [option] vmid
jmap -J-d64 -heap 16418
5.jhat
jhat(虛擬機堆轉儲快照分析工具),這個工具是用來分析 jmap dump 出來的文件。 由于這個工具功能比較簡陋,運行起來也比較耗時,所以這個工具不推薦使用,推薦使用MAT。
例如分析dump 出來的 test.bin,命令如下:
jhat test.bin
它會在本地啟動一個web服務,端口是7000,這樣直接訪問 127.0.0.1:7000就能看到分析結果了。
6.jstack
阿里實習面試
jstack(Java Stack Trace,Java堆棧跟蹤工具),這個命令用于查看虛擬機當前時刻的線程快照(一般是threaddump 或者 javacore文件)。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合。**生成線程快照的主要目的是:**定位線程出現長時間停頓的原因,入線程間死鎖、死循環、請求外部資源導致的長時間等待都是導致線程長時間停頓的常見原因。線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程到底在后臺做些什么事情。
命令格式:
jstack [option] vmid
使用:查看進程2849 的堆棧信息
[root@Bill-8 yrd_soft]# jstack 2849
(7)jconsole
阿里面經
JConsole 中,您將能夠監視 JVM 內存的使用情況、線程堆棧跟蹤、已裝入的類和 VM 信息以及 CE MBean。
jconsole:一個 java GUI 監視工具,可以以圖表化的形式顯示各種數據。并可通過遠程連接監視遠程的服務器VM。用 Java 寫的 GUI 程序,用來監控 VM,并可監控遠程的 VM,非常易用,而且功能非常強。命令行里打 jconsole,選則進程就可以了。
(8)jvisualvm
jvisualvm 同 jconsole 都是一個基于圖形化界面的、可以查看本地及遠程的 JAVA GUI 監控工具,Jvisualvm 同 jconsole 的使用方式一樣,直接在命令行打入 jvisualvm 即可啟動,jvisualvm 界面更美觀一些,數據更實時: