您好,登錄后才能下訂單哦!
這篇“虛擬機性能監控和故障處理的工具有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“虛擬機性能監控和故障處理的工具有哪些”文章吧。
·商業授權工具:主要是JMC(Java Mission Control)及它要使用到的JFR(Java FlightRecorder),JMC這個原本來自于JRockit的運維監控套件從JDK 7 Update 40開始就被集成到OracleJDK中,JDK 11之前都無須獨立下載,但是在商業環境中使用它則是要付費的 [1] 。
jps:虛擬機進程狀況工具
jstat:虛擬機統計信息監視工具
jstat(JVM Statistics Monitoring Tool)是用于監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或者遠程 [1] 虛擬機進程中的類加載、內存、垃圾收集、即時編譯等運行時數據,在沒有GUI圖形界面、只提供了純文本控制臺環境的服務器上,它將是運行期定位虛擬機性能問題的常用工具。
jstat [ option vmid [interval[s|ms] [count]] ]
參數interval和count代表查詢間隔和次數,如果省略這2個參數,說明只查詢一次。假設需要每250毫秒查詢一次進程2764垃圾收集狀況,一共查詢20次,那命令應當是:
jstat -gc 2764 250 20 很有用
選項option代表用戶希望查詢的虛擬機信息,主要分為三類:類加載、垃圾收集、運行期編譯狀況。詳細請參考表4-2中的描述。
jstat -gcutil 2764
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 6.20 41.42 47.20 16 0.105 3 0.472 0.577
jstat -class 7216 //查看類加載時間
Loaded Bytes Unloaded Bytes Time
7902 9691.2 3 2.6 4.34
查詢結果表明:這臺服務器的新生代Eden區(E,表示Eden)使用了6.2%的空間,2個Survivor區(S0、S1,表示Survivor0、Survivor1)里面都是空的,老年代(O,表示Old)和永久代(P,表示Permanent)則分別使用了41.42%和47.20%的空間。程序運行以來共發生Minor GC(YGC,表示YoungGC)16次,總耗時0.105秒;發生Full GC(FGC,表示Full GC)3次,總耗時(FGCT,表示Full GCTime)為0.472秒;所有GC總耗時(GCT,表示GC Time)為0.577秒。
jinfo:Java配置信息工具 不常用
jinfo(Configuration Info for Java)的作用是實時查看和調整虛擬機各項參數。使用jps命令的-v參數可以查看虛擬機啟動時顯式指定的參數列表,但如果想知道未被顯式指定的參數的系統默認值,除了去找資料外,就只能使用jinfo的-flag選項進行查詢了(如果只限于JDK 6或以上版本的話,使用java-XX:+PrintFlagsFinal查看參數默認值也是一個很好的選擇)。jinfo還可以使用-sysprops選項把虛擬機進程的System.getProperties()的內容打印出來。這個命令在JDK 5時期已經隨著Linux版的JDK發布,當時只提供了信息查詢的功能,JDK 6之后,jinfo在Windows和Linux平臺都有提供,并且加入了在運行期修改部分參數值的能力(可以使用-flag[+|-]name或者-flag name=value在運行期修改一部分運行期可寫的虛擬機參數值)。在JDK 6中,jinfo對于Windows平臺功能仍然有較大限制,只提供了最基本的-flag選項。
jinfo [ option ] pid
執行樣例:查詢CMSInitiatingOccupancyFraction參數值
jinfo -flag CMSInitiatingOccupancyFraction 1444
-XX:CMSInitiatingOccupancyFraction=85
jinfo -flag SurvivorRatio 12844
-XX:SurvivorRatio=8
jinfo -sysprops 6952
使用-sysprops選項把虛擬機進程的System.getProperties()的內容打印出來
jmap:Java內存映像工具
jmap(Memory Map for Java)命令用于生成堆轉儲快照(一般稱為heapdump或dump文件)。如果不使用jmap命令,要想獲取Java堆轉儲快照也還有一些比較“暴力”的手段:譬如在第2章中用過的-XX:+HeapDumpOnOutOfMemoryError參數,可以讓虛擬機在內存溢出異常出現之后自動生成堆轉儲快照文件,通過-XX:+HeapDumpOnCtrlBreak參數則可以使用[Ctrl]+[Break]鍵讓虛擬機生成堆轉儲快照文件,又或者在Linux系統下通過Kill-3命令發送進程退出信號“恐嚇”一下虛擬機,也能順利拿到堆轉儲快照。
jmap的作用并不僅僅是為了獲取堆轉儲快照,它還可以查詢finalize執行隊列、Java堆和方法區的詳細信息,如空間使用率、當前用的是哪種收集器等。
jmap [ option ] vmid
jmap -dump:format=b,file=eclipse.bin 3500
Dumping heap to C:\Users\IcyFenix\eclipse.bin ...
Heap dump file created
jhat:虛擬機堆轉儲快照分析工具
JDK提供jhat(JVM Heap Analysis Tool)命令與jmap搭配使用,來分析jmap生成的堆轉儲快照。jhat內置了一個微型的HTTP/Web服務器,生成堆轉儲快照的分析結果后,可以在瀏覽器中查看。不過實事求是地說,在實際工作中,除非手上真的沒有別的工具可用,否則多數人是不會直接使用jhat命令來分析堆轉儲快照文件的。
一般不會在部署應用程序的服務器上直接分析堆轉儲快照。
另外一個原因是jhat的分析功能相對來說比較簡陋,后文將會介紹到的VisualVM,以及專業用于分析堆轉儲快照文件的Eclipse Memory Analyzer、IBM HeapAnalyzer [2] 等工具,都能實現比jhat更強大專業的分析功能。
分析結果默認以包為單位進行分組顯示,分析內存泄漏問題主要會使用到其中的“HeapHistogram”(與jmap-histo功能一樣)與OQL頁簽的功能,前者可以找到內存中總容量最大的對象,后者是標準的對象查詢語言,使用類似SQL的語法對內存中的對象進行查詢統計。
jmap -dump:format=b,file=D:/dump.log 15220
jhat dump.log 通過localhsot:7000訪問
jstack:Java堆棧跟蹤工具
jstack(Stack Trace for Java)命令用于生成虛擬機當前時刻的線程快照(一般稱為threaddump或者javacore文件)。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的目的通常是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間掛起等,都是導致線程長時間停頓的常見原因。
jstack [ option ] vmid
jstack -l 15220
基礎工具總結
性能監控和故障處理工具
可視化故障處理工具
VisualVM在JDK 6 Update 7中首次發布,直到JRockit Mission Control與OracleJDK的融合工作完成之前,它都曾是Oracle主力推動的多合一故障處理工具,現在它已經從OracleJDK中分離出來, 成為一個獨立發展的開源項目 [2] 。VisualVM已不是JDK中的正式成員,但仍是可以免費下載、使用的。
JHSDB:基于服務性代理的調試工具
在高版本的JDK中,這些工具大多已有了功能更為強大的替代品,譬如JCMD、JHSDB的命令行模式
jhsdb 在java8中不存在。
使用以下命令進入JHSDB的圖形化模式,并使其附加進程11180:
jhsdb hsdb --pid 11180
https://rednaxelafx.iteye.com/blog/1847971
·相同的程序在64位虛擬機中消耗的內存一般比32位虛擬機要大,這是由于指針膨脹,以及數據類型對齊補白等因素導致的,可以開啟(默認即開啟)壓縮指針功能來緩解。
·大量使用本地緩存(如大量使用HashMap作為K/V緩存)的應用,在邏輯集群中會造成較大的內存浪費,因為每個邏輯節點上都有一份緩存,這時候可以考慮把本地緩存改為集中式緩存。
執行這個Shell腳本是通過Java的Runtime.getRuntime().exec()方法來調用的。這種調用方式可以達到執行Shell腳本的目的,但是它在Java虛擬機中是非常消耗資源的操作,即使外部命令本身能很快執行完畢,頻繁調用時創建進程的開銷也會非常可觀。Java虛擬機執行這個命令的過程是首先復制一個和當前虛擬機擁有一樣環境變量的進程,再用這個新的進程去執行外部命令,最后再退出這個進程。如果頻繁執行這個操作,系統的消耗必然會很大,而且不僅是處理器消耗,內存負擔也很重。
考慮到實際情況,Eclipse使用者甚多,它的編譯代碼我們可以認為是安全可靠的,可以不需要在加載的時候再進行字節碼驗證, 因此通過參數-Xverify:none禁止掉字節碼驗證過程也可作為一項優化措施。加入這個參數后,兩個版本的JDK類加載速度都有所提高,
Eclipse調優
-vm
D:/_DevSpace/jdk1.6.0_21/bin/javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.platform
-vmargs
-Dcom.sun.management.jmxremote
-Dosgi.requiredJavaVersion=1.5
-Xverify:none
-Xmx512m
-Xms512m
-Xmn128m
-XX:PermSize=96m
-XX:MaxPermSize=96m
-XX:+DisableExplicitGC
-Xnoclassgc
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=85
以上就是關于“虛擬機性能監控和故障處理的工具有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。