<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                本文主要是為了介紹虛擬機相關的工具,包括故障處理、性能監控和一些其他工具。 ## 故障處理工具 | 名稱 | 全稱 | 作用及描述 | | ----- | ----------------------------- |----| | `jps` | JVM Process Status Tool | 顯示指定系統內所有的HotSpot虛擬機進程 | | `jstat` | JVM Statistics Monitoring Tool | 用于收集HotSpot虛擬機各方面運行數據 | | `jinfo` | Configuration Info for Java | 顯示虛擬機配置信息 | | `jmap` | Memory Map for Java | 生成虛擬機的內存快照(heapdump文件) | | `jhat` | JVM Heap Dump Browser | 用于分析heapdump文件,會建立一個http/html服務器,讓用戶可以在瀏覽器查看分析結果 | | `jstack` | Stack Trace for Java | 顯示虛擬機的線程快照 | ### jps 類似Linux上的ps命令(查看進程信息的),jps是用來查看Java進程信息的。 (LVMID,Local Virtual Machine Identifier) 示例: ``` mango@mangodeMacBook-Pro ~ % jps -lmv 388 -Xms750m -Xmx750m -Xmn400m -XX:MetaspaceSize=248m -XX:MaxMetaspaceSize=500m -XX:+PrintGCDetails -Xloggc://Users/mango/logs/ideagc.log -verbose:gc -Xverify:none -XX:+DisableExplicitGC -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:ReservedCodeCacheSize=240m -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -XX:CICompilerCount=2 -Dsun.io.useCanonPrefixCache=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Djdk.attach.allowAttachSelf=true -Dkotlinx.coroutines.debug=off -Djdk.module.illegalAccess.silent=true -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:ErrorFile=/Users/mango/java_error_in_idea_%p.log -XX:HeapDumpPath=/Users/mango/java_error_in_idea.hprof -Djb.vmOptionsFile=/Users/mango/Library/Preferences/IdeaIC2019.3/idea.vmoptions -Didea.paths.selector=IdeaIC2019.3 -Didea.executable=idea -Didea.platform.prefix=Idea -Didea.home.path=/Applications/IntelliJ IDEA CE.app/Contents 7095 sun.tools.jps.Jps -lmv -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home -Xms8m ``` 參數: ``` -q 只輸出LVMID,省略主類名稱 -m 輸出main()函數的參數 -l 輸出啟動類路徑 -v 輸出虛擬機啟動時的JVM參數 ``` ### jstat 可以顯示本地或者遠程虛擬機進程中的類加載、內存、垃圾收集、即時編譯等運行時數據信息。 示例: ``` mango@mangodeMacBook-Pro ~ % jstat -class 388 Loaded Bytes Unloaded Bytes Time 36365 73094.0 0 0.0 66.21 ``` 參數: ![](https://img.kancloud.cn/89/c8/89c8b313ecf8de54f71011957e428bed_1670x938.png) ### jinfo 作用是實時查看和調整虛擬機各項參數。 使用: ``` Usage: jinfo <option> <pid> (to connect to a running process) where <option> is one of: -flag <name> to print the value of the named VM flag -flag [+|-]<name> to enable or disable the named VM flag -flag <name>=<value> to set the named VM flag to the given value -flags to print VM flags -sysprops to print Java system properties <no option> to print both VM flags and system properties -? | -h | --help | -help to print this help message ``` ### jmap 用于生成堆轉儲快照。 使用方式: ``` Usage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core> (to connect to a core file) jmap [option] [server_id@]<remote server IP or hostname> (to connect to remote debug server) ``` 示例: ``` mango@mangodeMacBook-Pro ~ % jmap -dump:format=b,file=idea.bin 7166 Dumping heap to /Users/mango/idea.bin ... Heap dump file created ``` ### jhat 與jmap搭配使用,來分析jmap生成的堆轉儲快照。 示例: ``` mango@mangodeMacBook-Pro ~ % jhat idea.bin Reading from idea.bin... Dump file created Fri Aug 19 16:24:22 CST 2022 Snapshot read, resolving... Resolving 7657475 objects... Chasing references, expect 1531 dots........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... Eliminating duplicate references........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... Snapshot resolved. Started HTTP server on port 7000 Server is ready. ``` 通過http://localhost:7000來訪問內存分析結果。 ![](https://img.kancloud.cn/1c/26/1c265bdf97dbd96d033d6ae9e10577a1_2280x1104.png) ### jstack 用于生成虛擬機當前時刻的線程快照(一般稱為threaddump或者 javacore文件)。 參數: ``` -F 當正常輸出的請求不被響應時,強制輸出線程堆棧 -l 除堆棧外,顯示關于鎖的附加信息 -m 如果調用到本地方法的話,可以顯示C/C++的堆棧 ``` 示例:(輸出結果只截取了部分) ``` mango@mangodeMacBook-Pro ~ % jstack -l 7369 2022-08-19 16:34:01 Full thread dump OpenJDK 64-Bit Server VM (11.0.6+8-b520.66 mixed mode): Threads class SMR info: _java_thread_list=0x0000600001f8a2a0, length=45, elements={ 0x00007f858f1c2000, 0x00007f858f1ef800, 0x00007f858f200000, 0x00007f858f20c000, 0x00007f8590034800, 0x00007f8590035000, 0x00007f8590038000, 0x00007f858f208000, 0x00007f858f24b000, 0x00007f8590809000, 0x00007f85900a6000, 0x00007f8590018000, 0x00007f8590949000, 0x00007f858f255000, 0x00007f858f8c5000, 0x00007f858f8d3000, 0x00007f85901d7000, 0x00007f85909a6800, 0x00007f85909c4000, 0x00007f8590264800, 0x00007f8590268800, 0x00007f85909ed000, 0x00007f858f3ed800, 0x00007f858f476000, 0x00007f858f4db800, 0x00007f858f4d9800, 0x00007f8590be5000, 0x00007f8590c4b800, 0x00007f85902b4000, 0x00007f858f5c5800, 0x00007f858faa1000, 0x00007f8590dca800, 0x00007f85900e9800, 0x00007f85903a8000, 0x00007f85903b8000, 0x00007f859587a000, 0x00007f8595197000, 0x00007f859528d800, 0x00007f859528a000, 0x00007f858f2b0800, 0x00007f8590732000, 0x00007f8595aed800, 0x00007f85909d6000, 0x00007f8596845000, 0x00007f8599821000 } "Reference Handler" #2 daemon prio=10 os_prio=31 cpu=6.70ms elapsed=32.36s tid=0x00007f858f1c2000 nid=0x3f03 waiting on condition [0x0000700010280000] java.lang.Thread.State: RUNNABLE at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.6/Native Method) at java.lang.ref.Reference.processPendingReferences(java.base@11.0.6/Reference.java:241) at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.6/Reference.java:213) Locked ownable synchronizers: - None "Finalizer" #3 daemon prio=8 os_prio=31 cpu=2.67ms elapsed=32.36s tid=0x00007f858f1ef800 nid=0x4403 in Object.wait() [0x0000700010383000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(java.base@11.0.6/Native Method) - waiting on <no object reference available> at java.lang.ref.ReferenceQueue.remove(java.base@11.0.6/ReferenceQueue.java:155) - waiting to re-lock in wait() <0x00000007d3e7a738> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(java.base@11.0.6/ReferenceQueue.java:176) at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.6/Finalizer.java:170) Locked ownable synchronizers: - None "Signal Dispatcher" #4 daemon prio=9 os_prio=31 cpu=0.30ms elapsed=32.34s tid=0x00007f858f200000 nid=0x4203 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None ``` ## 性能監控工具 | 名稱 | 全稱 | 作用及描述 | | ----- | ----------------------------- |----| | `JHSDB` | | 是一款基于服務性代理(Serviceability Agent,SA)實現的進程外調試工具。 | | `JConsole` | Java Monitoring and Management Console | 是一款基于JMX的可視化監控管理工具。 | | `VisualVM` | All-in-One Java Troubleshooting Tool | 多合一故障處理工具,支持插件,及運行監視、故障處理、性能分析于一身 | | `JMC` | Java Mission Control | JMC與虛擬機采用JMX協議通信,可以作為JMX控制臺,也作為JFR分析工具 | ### JHSDB 筆者如果是在Mac的機器上,可參考[HSDB 在mac下的啟動和使用](https://www.jianshu.com/p/9a26e85a2482)打開HSDB工具。 使用如下命令打開HSDB: ``` sudo java -cp /Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/lib/sa-jdi.jar sun.jvm.hotspot.HSDB ``` 運行截圖如下:(具體功能,感興趣的可以自己研究一下) ![](https://img.kancloud.cn/c4/27/c4275e469055346bf569c5f001858a0f_2098x1574.png) ### JConsle 是一款基于JMX的可視化管理工具。 直接雙擊JDK目錄下的`jconsole`命令行啟動(在oracle jdk1.8的bin目錄下有): ![](https://img.kancloud.cn/19/47/19477c6d1f6d5752745641bfabbb2fd9_1800x1500.png) 可以查看內存、線程、類加載、虛擬機參數及MBean相關信息。 ### VisualVM 是一款多功能工具,支持插件擴展。 直接雙擊JDK目錄下的`jvisualvm`命令行啟動(在oracle jdk1.8的bin目錄下有),也可以獨立下載對應軟件: ![](https://img.kancloud.cn/32/31/3231d6b794eb804fe5d6859281944a5d_1876x1394.png) 其中有個Visual GC的插件推薦使用,可以圖形化看到內存垃圾回收相關信息。 ### Java Mission Control 除了做JMX控制臺外,還能做為JFR分析工具。 直接雙擊JDK目錄下的`jcm`命令行啟動(在oracle jdk1.8的bin目錄下有),也可以獨立下載對應軟件: ![](https://img.kancloud.cn/bd/14/bd14f88fa87bc5d4a7ff9209983012b6_2376x1568.png) 其中MBean(MBean就是被[JMX管理](https://baike.baidu.com/item/JMX/2829357?fr=aladdin)的資源)在JConsle、VisualVM和JMC中都可以查看。 JMX(Java管理擴展)提供了一種簡單的、基礎的方法,用來管理諸如應用、設備和服務等資源。 ## 其他工具 | 名稱 | 全稱 | 作用及描述 | | ----- | ----------------------------- |----| | `HSDIS` | HotSpot disassembler | 一個Sun官方推薦的HotSpot虛擬機JIT編譯代碼的反匯編插件 | | `JITWatch` | | JIT編譯分析工具,配合HSDIS能查看Java源碼、字節碼和匯編碼的對應關系。 | 詳細使用請參考:[Java反匯編:HSDIS、JITWatch](https://zhuanlan.zhihu.com/p/158168592) ## 參考資料 * 周志明 * 《深入理解Java虛擬機》 * Mac下使用JHSDB https://www.jianshu.com/p/9a26e85a2482
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看