2013年9月3日 星期二

Java檢查記憶體使用情形

主要是因為出現了 java.lang.OutOfMemoryError: Java heap space

 

JDK6以後附了 Java VisualVM (jvisualvm.exe) 在bin的目錄內, 這裡有詳細說明;

1.Overview

先把你要檢查的Java執行起來, 然後打開jvisualvm(如圖), 在左邊Applications內點選你的JVM(我是用OC4J), 就可以在Overview看到JVM的運作環境及設定的參數.

 

jVisualVm

因為要測heap , 你會發現上圖我有加了一些參數, 這裡說明一下:

-XX:+HeapDumpOnOutOfMemoryError   在出現 OutOfMemoryError 時會產生一個 hprof的檔案(e.g. java_pidxxxxx.hprof, 預設會寫在JVM所在路徑, 也可以加 -XX:HeapDumpPath=yourpath ), 方便我們檢查記憶體使用的情況; 使用方法請看這裡 .

hprof 檔可以用 Eclipse memory analyzer (mat, http://www.eclipse.org/mat/ ) 打開來看, 建議載 Stand-alone Eclipse RCP Applications 的版本比較方便(如圖)

mat-1

-Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m  這幾個參數相信大家都很熟悉, 我就不多說了; 只是 Permanent Size 本來大家都說很小(只要64m), 可是經過 jVisualVM測過, 我發現我的 AP 一下就超過了, 所以我把它改為 128m 起跳; heap size 也把它加到 512m.

 

 

2.切換到Monitor還有圖(chart)

jVisualVm chart

 

接下來就是觀察記憶體使用情形, 然後跟著調整及修正了.

參考自 http://javarevisited.blogspot.sg/2011/09/javalangoutofmemoryerror-permgen-space.html

沒有留言: