摘要:這些工具包括名稱主要作用顯示指定系統(tǒng)內(nèi)所有的虛擬機進程。虛擬機堆轉(zhuǎn)存快照分析工具命令用于與搭配使用,用來分析生成的文件。命令格式命令樣例線程堆棧跟蹤工具用于生成虛擬機當前時刻的線程快照。
概述
給系統(tǒng)定位問題的時候,知識、經(jīng)驗是關(guān)鍵基礎(chǔ),數(shù)據(jù)是依據(jù),工具是運用知識處理數(shù)據(jù)的手段。
java開發(fā)人員可以在jdk安裝的bin目錄下找到除了java,javac以外的其他命令。這些命令主要是一些用于監(jiān)視虛擬機和故障處理的工具。這些工具包括:
名稱 | 主要作用 |
---|---|
jps | JVM process Status Tool, 顯示指定系統(tǒng)內(nèi)所有的HotSpot虛擬機進程。通常是本地主機 |
jstat | JVM Statistics Monitoring Tool,用于收集HotSpot虛擬機各方面的運行數(shù)據(jù) |
jinfo | Configuration Info for java, 顯示虛擬機配置信息 |
jmap | Memory Map for Java, 生成虛擬機的內(nèi)存存儲快照(heapdump文件) |
jhat | JVM Heap Dump Browser, 用于分析heapdump文件,它建立一個HTTP/HTML服務(wù)器,讓用戶可以在瀏覽器上查看分析結(jié)果 |
jstack | Stack Trace for Java, 顯示虛擬機的線程快照 |
jps的功能和unix/liunx中的ps命令是類似。只不過它是打印出正在運行的虛擬機進程,并顯示虛擬機執(zhí)行主類的名稱以及這些進程的本地虛擬機唯一ID(Local Virtual Machine Identifier, LVMID,通常是系統(tǒng)進程ID)。
jps命令格式:
jps [options] [hostId]
jps可以通過RMI協(xié)議查詢開啟了RMI服務(wù)的遠程虛擬機進程狀態(tài),hostId為RMI注冊表中注冊的主機名稱。
jps其他常用選項:
-q 只輸出LVMID, 省略主類的名稱; -m 輸出虛擬機進程啟動時候傳遞給主類main()函數(shù)的參數(shù); -l 輸出主類的全稱,如果進程執(zhí)行的是jar包,輸出jar路徑; -v 輸出虛擬機進程啟動時候JVM參數(shù)。
jps命令樣例:
[root@localhost ~]# jps -l 3914 org.zhangyoubao.payservice.App 12180 sun.tools.jps.Jps 6913 org.zhangyoubao.userprofiler.Appjstat:虛擬機統(tǒng)計信息監(jiān)視工具
jstat是用于監(jiān)視虛擬機各種運行狀態(tài)信息的工具。它可以顯示本地或遠程虛擬機進程中類load,內(nèi)存gc.jit等運行參數(shù)。
jstat命令格式:
jstat [option vmid [interval [s|ms] [count]]]
interval和count代表查詢間隔和次數(shù)。如果省略這兩個參數(shù),說明只查詢一次。
jstat其他常用選項:
-class 監(jiān)視類load/unload數(shù)量、總空間已經(jīng)裝載時間; -compiler 輸出JIT編譯器編譯過的方法、耗時等信息; -printcompilation 輸出已經(jīng)被JIT編譯的方法; -gc 監(jiān)視java堆狀況; -gccapacity 監(jiān)視內(nèi)容與-gc基本相同,但輸出關(guān)注java各個區(qū)域的最大/最小空間; -gcutil 監(jiān)視內(nèi)容與-gc基本相同,但輸出關(guān)注已使用空間占用百分百比; -gccause 與-gcutil功能一樣,額外輸出導致上一次GC產(chǎn)生原因; -gcnew 監(jiān)視新生代GC狀況; -gcnewcapacity 監(jiān)視新生代,輸出同-gccapacity; -gcold 監(jiān)視老年代GC狀況; -gcoldcapacity 監(jiān)視老年代,輸出同-gccapacity; -gcpermcapactiy 監(jiān)視永久代(代碼區(qū)),輸出同-gccapacity;
jstat命令樣例:
[root@localhost ~]# jstat -gc 6913 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 34048.0 34048.0 0.0 3217.8 272640.0 171092.7 683264.0 168910.7 46872.0 28031.2 37857 380.644 69 3.447 384.091jinfo:Java配置信息工具
jinfo的作用是實時的查看和調(diào)整虛擬機各項參數(shù)。
jinfo命令格式:
jinfo [option] pid
jinfo其他常用選項:
-flag name=value 修改參數(shù) -flag name 參數(shù)參數(shù)
jinfo命令樣例:
[root@localhost ~]# jinfo 6913 Attaching to process ID 6913, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.91-b01 Java System Properties: ... VM Flags: -Xms1000m -Xmx1000m -Dconf=/usr/local/user_profiler/conf -Dserver.root=/usr/local/user_profiler -Dcom.sun.management.jmxremote.port=7003 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseConcMarkSweepGCjmap:java內(nèi)存映射工具
jmap命令可以用于生產(chǎn)堆存儲快照(dump文件)。它還可以查下finalize隊列(自我拯救隊列)、java堆和代碼區(qū)的詳細信息。
jmap命令格式:
jmap [option] vmid
jmap其他常用選項:
-dump 生成java堆存儲快照。格式:-dump:[live,]format=b,file=; -finalizerinfo 顯示F-Queue中等待Finalizer現(xiàn)象執(zhí)行finalize方法的對象; -heap 顯示java堆詳細信息,如使用哪種回收器、參數(shù)配置、分代狀況等待; -histo 顯示堆中對象統(tǒng)計信息,包括類、實例書、合計容量; -permstat 以ClassLoader為統(tǒng)計入口顯示永久代內(nèi)存信息; -F 當虛擬機進程堆-dump選項沒有響應(yīng)時候,可以使用這個選項強制生成dump快照。
jmap命令樣例:
[root@localhost ~]# jmap -histo 6913|head -20 num #instances #bytes class name ---------------------------------------------- 1: 1864966 113459432 [C 2: 201846 49201192 [B 3: 1597065 38329560 java.lang.String 4: 117477 15037056 org.zhangyoubao.thriftdef.UserUsefulInfo 5: 47104 11072048 [I 6: 268631 8596192 java.util.HashMap$Entry 7: 48812 74517608: 100683 6443712 com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty 9: 48812 6257856 10: 4230 5271640 11: 159491 5103712 java.util.Hashtable$Entry 12: 120226 4809040 org.zhangyoubao.common.cache.adv.Node 13: 127027 4064864 java.util.concurrent.ConcurrentHashMap$HashEntry 14: 230433 3686928 java.lang.Integer 15: 3765 3049824 16: 20917 3012048 com.mysql.jdbc.Field 17: 4230 2943840
其中[C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][]。
jhat: 虛擬機堆轉(zhuǎn)存快照分析工具jhat 命令用于與jmap搭配使用,用來分析jmap生成的dump文件。jhat內(nèi)置了一個微型的HTTP/HTML服務(wù)器,生成的dump文件的分析結(jié)果后,可以在瀏覽器查看。
jhat命令格式:
jmap filename
jhat命令樣例:
[root@localhost ~]# jhat html_intercept_server.dump Reading from html_intercept_server.dump... Dump file created Wed Nov 23 13:05:33 CST 2016 Snapshot read, resolving... Resolving 203681 objects... Chasing references, expect 40 dots........................................ Eliminating duplicate references........................................ Snapshot resolved. Started HTTP server on port 7000 Server is ready.jstack:java線程堆棧跟蹤工具
jstack用于生成虛擬機當前時刻的線程快照。線程快照就是當前虛擬機每一條線程正在執(zhí)行的方法堆棧計劃,生成線程快照的主要目的是定位線程長時間停頓的原因。在線程停頓的時候,通過jstack來查看沒有響應(yīng)的線程在后臺做些什么事情,或者等待著什么資源。
jstack命令格式:
jstack [option] vmid
jstack其他選項:
-F 當正常輸出的請求不被響應(yīng)的時候,強制輸出線程堆棧; -l 除了顯示堆棧外,顯示關(guān)于鎖的附加信息; -m 如果調(diào)用本地方法,可以顯示C/C++的堆棧。
jstack命令樣例:
[root@localhost ~]# jstack 29577|head -20 2016-11-23 12:58:23 Full thread dump OpenJDK Server VM (24.91-b01 mixed mode): "pool-1-thread-7261" prio=10 tid=0x0893a400 nid=0x6b0d waiting on condition [0x652ad000] java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x75b5b400> (a java.util.concurrent.SynchronousQueue$TransferStack) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359) at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:942) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) "service_hot_lscs-0" daemon prio=10 tid=0x6982dc00 nid=0x6aeb waiting on condition [0x64ce1000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.zhangyoubao.video.client.runner.SimpleVideoRunner.doWork(SimpleVideoRunner.java:150)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69845.html
摘要:監(jiān)控和故障處理工具顯示指定系統(tǒng)內(nèi)所有的虛擬機進程用于收集虛擬機各方面的運行數(shù)據(jù)。的常用功能選項測試上面輸出了我正在運行程序的包名下的類名虛擬機統(tǒng)計信息監(jiān)視工具使用于監(jiān)視虛擬機各種運行狀態(tài)信息的命令行工具。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記與常見面試題總結(jié) 本節(jié)常見面試題(推薦帶著問題閱讀,問題答案在文中都有提到): JVM調(diào)優(yōu)的常見命令行工具有哪些?...
摘要:目錄往期博客課堂篇初識常量池簡單理解字符串常量池靜態(tài)常量池大整型常量池為什么要了解垃圾收集和內(nèi)存分配如何判斷對象已死引用計數(shù)算法可達性分析算法之后引用的擴充回收方法區(qū)垃圾收集算法分代收集理論標記清除標記復(fù)制標記整理對象分 ...
摘要:點擊進入我的博客命令行工具這些工具大多數(shù)是類庫的一層薄的包裝,它們的主要功能代碼是在類庫中實現(xiàn)的??梢暬ぞ呤堑侥壳盀橹闺S發(fā)布的功能最強大的運行監(jiān)視和故障處理程序,并且可以預(yù)見在未來一段時間內(nèi)都是官方主力發(fā)展的虛擬機故障處理工具。 點擊進入我的博客 3.1 JDK命令行工具 showImg(https://segmentfault.com/img/remote/14600000174...
摘要:虛擬機性能監(jiān)控與故障處理工具詳解概述本文參考的是周志明的深入理解虛擬機第四章,為了整理思路,簡單記錄一下,方便后期查閱。虛擬機堆轉(zhuǎn)儲快照分析工具功能用于分析生成的。 虛擬機性能監(jiān)控與故障處理工具 詳解 4.1 概述 本文參考的是周志明的 《深入理解Java虛擬機》 第四章 ,為了整理思路,簡單記錄一下,方便后期查閱。 JDK本身提供了很多方便的JVM性能調(diào)優(yōu)監(jiān)控工具,除了集成式的Vis...
閱讀 1086·2021-11-25 09:43
閱讀 708·2021-11-22 14:45
閱讀 3836·2021-09-30 09:48
閱讀 1074·2021-08-31 09:41
閱讀 1980·2019-08-30 13:52
閱讀 1990·2019-08-30 11:24
閱讀 1354·2019-08-30 11:07
閱讀 963·2019-08-29 12:15