GC 日誌分析

GC 日誌分析

打印gc log的詳細信息
Java代碼 複製代碼收藏代碼spinner.gif
  1. set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -XX:+PrintGCDetails  

set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -XX:+PrintGCDetails

a827642c-396a-34a2-9ddf-6b0cb92aaa08.jpg

引用
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m  -verbose:gc -Xloggc:gc.log -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError

如果真是內存泄漏,系統最終會拋OutOfMemory, 加這個-XX:+HeapDumpOnOutOfMemoryError (jdk1.5以上)可以得到heap dump. 這個dump紀錄了所有在OutOfMemory時存在於內存中的對象。用普通的jhat之類的工具分析dump文件不夠好。推薦使用SAP Memory Analyzer。用這個工具你可以比較快的定位原因。  

gc日誌分析
引用
[GC [DefNew: 35592K->1814K(36288K), 0.0326932 secs] 38508K->7792K(520256K), 0.0336419 secs]


第一個箭頭:35592K->1814K(36288K),箭頭指向的是新生段的內存佔用情況;
第二個箭頭:38508K->7792K(520256K),箭頭指向的是回收後的內存佔用情況。
圓括號中通常指的是當前申請的內存大小。

引用
[GC [<collector>: <starting occupancy1> -> <ending occupancy1>, <pause time1> secs] <starting occupancy3> -> <ending occupancy3>, <pause time3> secs]

<collector>GC收集器的名稱  

<starting occupancy1> 新生代在GC前佔用的內存  
<ending occupancy1> 新生代在GC後佔用的內存  
<pause time1> 新生代局部收集時jvm暫停處理的時間  

<starting occupancy3> JVM Heap 在GC前佔用的內存  
<ending occupancy3> JVM Heap 在GC後佔用的內存  
<pause time3> GC過程中jvm暫停處理的總時間  

47a7efc9-aa6f-3d51-89f1-411ccfc96b7a.jpg

如果回收總量相等,就表示100%的收回,沒有任何新生代的對象被提升到中生代或者永久區。而本例中表示3062K沒有被回收,即2062K 新生代內容被提升到中生代。


Java代碼 複製代碼收藏代碼spinner.gif
  1. [Full GC 873087K->873087K(955648K), 4.1838200 secs]  

  2. [Full GC 873087K->871781K(955648K), 4.1683140 secs]  

  3. [Full GC 873087K->873087K(955648K), 4.2085010 secs]  

  4. [Full GC 873087K->872260K(955648K), 4.2084700 secs]  

  5. [Full GC 873081K->873081K(955648K), 4.2623640 secs]  

  6. [Full GC 873081K->872408K(955648K), 4.3412570 secs]  

  7. 2011-08-0817:04:10,819 ERROR [com.koolearn.util.cache.AliMemCacheEngine.get(AliMemCacheEngine.java:164)] - <>  

  8. [Full GC 873087K->873087K(955648K), 4.3155510 secs]  

  9. [Full GC 873087K->872481K(955648K), 4.0971750 secs]  

  10. [Full GC 873087K->873087K(955648K), 4.1474260 secs]  

  11. [Full GC 873087K->872766K(955648K), 4.3128090 secs]  

  12. java.lang.OutOfMemoryError: Java heap space  

  13. [Full GC 873087K->873087K(955648K), 4.3855320 secs]  

  14. [Full GC 873087K->871522K(955648K), 4.2014260 secs]  

  15. [Full GC 871649K->871649K(955648K), 4.5445160 secs]  

  16. [Full GC 873087K->873087K(955648K), 4.3851440 secs]  

  17. [Full GC[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor778]  

  18. [Unloading class sun.reflect.GeneratedSerializationConstructorAccessor779]  

  19. 873087K->871942K(955648K), 4.1766480 secs]  

  20. [Full GC 873087K->872056K(955648K), 4.4511170 secs]  

  21. [Full GC 873087K->873087K(955648K), 4.3548710 secs]  

  22. [Full GC 873087K->872185K(955648K), 4.5506940 secs]  

[Full GC 873087K->873087K(955648K), 4.1838200 secs]
[Full GC 873087K->871781K(955648K), 4.1683140 secs]
[Full GC 873087K->873087K(955648K), 4.2085010 secs]
[Full GC 873087K->872260K(955648K), 4.2084700 secs]
[Full GC 873081K->873081K(955648K), 4.2623640 secs]
[Full GC 873081K->872408K(955648K), 4.3412570 secs]
2011-08-08 17:04:10,819 ERROR [com.koolearn.util.cache.AliMemCacheEngine.get(AliMemCacheEngine.java:164)] - <>
[Full GC 873087K->873087K(955648K), 4.3155510 secs]
[Full GC 873087K->872481K(955648K), 4.0971750 secs]
[Full GC 873087K->873087K(955648K), 4.1474260 secs]
[Full GC 873087K->872766K(955648K), 4.3128090 secs]
java.lang.OutOfMemoryError: Java heap space
[Full GC 873087K->873087K(955648K), 4.3855320 secs]
[Full GC 873087K->871522K(955648K), 4.2014260 secs]
[Full GC 871649K->871649K(955648K), 4.5445160 secs]
[Full GC 873087K->873087K(955648K), 4.3851440 secs]
[Full GC[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor778]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor779]
 873087K->871942K(955648K), 4.1766480 secs]
[Full GC 873087K->872056K(955648K), 4.4511170 secs]
[Full GC 873087K->873087K(955648K), 4.3548710 secs]
[Full GC 873087K->872185K(955648K), 4.5506940 secs]


Full GC 即全量GC,垃圾回收分小GC和Full GC。前者針對年輕代,後者針對年老代。FULL GC出現的很多有時候是因爲你應用中2M以上的對象比較多。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章