由於參數調優,遂整理JVM,工做調優+面試,都能幫你從容應對

關注公衆號:Java架構師聯盟,每日更新技術好文
部分資料已經上傳到個人git倉庫中:有須要的能夠下載

最近由於工做和麪試的緣由(大boss也不知道咋想的,把面試的任務給了我一部分,我以後是總監面,要了命了)那就跟隨市場潮流吧,市場上什麼比較火熱,我就用什麼技術問白,正好公司業務中最近也用到了jvm的相關的內容,因此也算是本身回憶複習,也算是總結吧,我把經常使用的jvm調優的參數進行整理,而且在最後,我將jvm所涉及的知識點進行了詳細的整理java

Sun JDK 監控和故障處理工具

 

經常使用命令:

1. jps -l 查詢LVMID,及主類的名稱 C:\Users\Harry>jps -l 11856 com.ssm.common.jvm.JvmTest 14368 com.ddc.template.TemplateApplication 16848 19664 6640 org.jetbrains.jps.cmdline.Launcher 7732 sun.tools.jps.Jps 2168 org.apache.zookeeper.server.quorum.QuorumPeerMain 2. jps -v 輸出虛擬機進程參數 C:\Users\Harry>jps -v 11856 JvmTest -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:49232 -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -Dfile.encoding=utf8 3. jstat -gc 11856 250 5 每250毫秒查詢一次進程11856垃圾收集狀況情況,一共查詢5次 C:\Users\Harry>jstat -gc 11856 250 20 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 4. jstat -gc 11856 只查詢一次 C:\Users\Harry>jstat -gc 11856 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 5. jstat -gcutil 11856 查詢各JVM內存使用百分比 C:\Users\Harry>jstat -gcutil 11856 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 0.00 93.01 0.00 17.42 19.75 0 0.000 0 0.000 0.000 6. jstat -gcnew 11856 查詢新生代GC情況 C:\Users\Harry>jstat -gcnew 11856 S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 1024.0 1024.0 0.0 0.0 15 15 0.0 8192.0 7619.8 0 0.000 7. jstat -gcold 11856 查詢老年代GC情況 C:\Users\Harry>jstat -gcold 11856 MC MU CCSC CCSU OC OU YGC FGC FGCT GCT 4480.0 780.5 384.0 75.8 10240.0 0.0 0 0 0.000 0.000 8. jinfo -flag CMSInitiatingOccupancyFraction 11856 查詢JVM參數的值 C:\Users\Harry>jinfo -flag CMSInitiatingOccupancyFraction 11856 -XX:CMSInitiatingOccupancyFraction=-1 9. jinfo -sysprops 11856 能夠把System.getProperties()信息打印出來 C:\Users\Harry>jinfo -sysprops 11856 Attaching to process ID 11856, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.92-b14 java.runtime.name = Java(TM) SE Runtime Environment java.vm.version = 25.92-b14 ...... 10. jmap -dump:format=b,file=eclipse.bin 11856 生成java堆轉儲快照 C:\Users\Harry>jmap -dump:format=b,file=eclipse.bin 11856 Dumping heap to C:\Users\Harry\eclipse.bin ... Heap dump file created 11. jhat eclipse.bin 分析dump文件,瀏覽器中訪問http://localhost:7000 C:\Users\Harry>jhat eclipse.bin Reading from eclipse.bin... Dump file created Sun Jul 22 11:55:08 CST 2018 Snapshot read, resolving... Resolving 11914 objects... Chasing references, expect 2 dots.. Eliminating duplicate references.. Snapshot resolved. Started HTTP server on port 7000 Server is ready. 12. jmap -heap 11856 查看堆中jvm參數狀況 Attaching to process ID 11856, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.131-b11 using thread-local object allocation. Parallel GC with 8 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 1073741824 (1024.0MB) NewSize = 357564416 (341.0MB) MaxNewSize = 357564416 (341.0MB) OldSize = 716177408 (683.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 310902784 (296.5MB) used = 90540600 (86.34624481201172MB) free = 220362184 (210.15375518798828MB) 29.121836361555385% used From Space: capacity = 23068672 (22.0MB) used = 11927744 (11.37518310546875MB) free = 11140928 (10.62481689453125MB) 51.70537775213068% used To Space: capacity = 22544384 (21.5MB) used = 0 (0.0MB) free = 22544384 (21.5MB) 0.0% used PS Old Generation capacity = 716177408 (683.0MB) used = 82475416 (78.6546859741211MB) free = 633701992 (604.3453140258789MB) 11.516059439842035% used 13. jmap -dump:live,format=b,file=heap.hprof 11856 將heap.hprof傳輸出來到window電腦上使用mat工具分析。 14. jhat -heap 11856 顯示java堆詳細信息,如使用哪一種回收器、參數配置、分代情況等,只在linux平臺才能夠測試 15. jstack -l 11856 除堆棧外,顯示鎖的附加信息 "Finalizer" #3 daemon prio=8 os_prio=1 tid=0x00000000152da800 nid=0x18b4 in Object.wait() [0x000000001664e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000ff608ee0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - locked <0x00000000ff608ee0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) Locked ownable synchronizers: - None "Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x00000000152b9000 nid=0x444c in Object.wait() [0x000000001654f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000ff606b50> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) - locked <0x00000000ff606b50> (a java.lang.ref.Reference$Lock) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) Locked ownable synchronizers: - None

這些基本涵蓋了我在平常工做中用到的以及網上查找相關資料的時候,看到的不錯的東西記錄下來的,jvm的參數調優基本是能夠應付正常的生活以及面試需求linux

固然了,只有這些是不夠的,來看我準備的更全的資料吧git

 

須要這份思惟導圖的,關注+轉發後私信「資料」便可查看獲取方式面試

第1章概念

介紹了Java虛擬機的概念、定義,講解了Java 語言規範和Java虛擬機規範,最後,還介紹了OpenJDK的調試方法。算法

 

第2章虛擬機架構

介紹了Java虛擬機的整體架構,說明了堆、棧、方法區等內存空間的做用和彼此之間的聯繫。apache

 

 

第3章配置參數

介紹了Java 虛擬機的經常使用配置參數,重點對垃圾回收跟蹤參數、內存配置參數作了詳細的介紹,並給出了案例說明。設計模式

 

第4章垃圾回收算法--基礎

從理論層面介紹了垃圾回收的算法,如引用計數、標記清除、標記壓縮、複製算法等。本章是第5章的理論基礎。瀏覽器

 

第5章垃圾回收算法--總結

講解了基於垃圾回收的理論知識,進一步詳細介紹了Java虛擬機中實際使用的各類垃圾回收器,包括串行回收器、並行回收器、CMS、G1等。多線程

 

須要這份思惟導圖的,關注+轉發後私信「資料」便可查看獲取方式架構

第6章性能監控和診斷

介紹了Java虛擬機的性能監控和故障診斷工具,考慮到實用性,也介紹了系統級性能監控工具的使用,二者結合,能夠更好地幫助讀者處理實際問題。

 

第7章分析方法和案例

介紹了對Java堆的分析方法和案例,主要講解了MAT和Visual VM兩款工具的使用,以及各自OQL的編寫方式。

 

第8章 內部鎖

介紹了Java虛擬機對多線程,尤爲是對鎖的支持,本章不只介紹了虛擬機內部鎖的實現、優化機制,也給出了一些Java語言層面的鎖優化思路,最後,還介紹了無鎖的並行控制方法。

 

第9章 Class文件結構

介紹了Java虛擬機的核心一Class 文件結構,Class 文件做爲Java虛擬機的基石,有着舉足輕重的做用,對深刻理解Java虛擬機有着不可忽視的做用。

 

第10章 類的裝載

介紹了Java虛擬機中類的裝載系統,其中,着重介紹了Java虛擬機中ClassLoader的實現以及設計模式。

 

第11章 執行系統和字節碼

介紹了Java虛擬機的執行系統和字節碼,爲了幫助讀者更快更好地理解Java字節碼,本章對字節碼進行了分類講解,而且理論聯繫實際,給出了經過ASM框架進行字節碼注入的案例。

 

關於jvm,不管是面試仍是工做中的性能調優,我今天爲你們準備的資料,都能從其中找到相應的參考部分,但願能爲你們的工做和麪試提供一點點的便利,我已經爲你們整理好啦,更有視頻講解在其中,

有須要這些資料的老鐵,關注+轉發後,私信資料查看獲取方式吧

相關文章
相關標籤/搜索