昨天有提到,在產出heap dump時要注意,如果知道你的程式使用很多的memory的話,要先檢查空間是否足夠,否則dump檔可能會把空間塞爆。
一般來說WebSphere上每個Server預設給的上限256MB,
如果程式使用的memory超過這個上限就會發生OOM (Out Of Memory),
當OOM發生時,WAS會自動傾倒出heap dump、core dump、java core等紀錄檔。
為了避免發生OOM,如果確定程式就是要用到這麼多,甚至更多記憶體的話,
我們可以從console上調整Server的Heap Size:
側邊選單 > Servers > WebSphere application servers > server1
右側選單找到Server Infrastructure > 展開 Java and Process Management,點擊進入Process definition
右側點擊 Java Virtual Machine,進入的頁面就可以調整起始的heap size大小以及上限了
在這個頁面,我們也可以勾選 Verbose garbage collection (藍框處),再按下ok並存檔、重啟server
如此一來在native_stderr.log就會記錄gc的回收資訊以及記憶體使用量的狀況,
之後可以拿工具來開啟log以圖表檢視。
這邊,我們來做一下實踐,
我在我的程式寫一段無窮回圈,故意製造OOM的狀況發生,
可以從TextLog.log看到java.lang.OutOfMemoryError: Java heap space
用IBM的工具分析log,可以看到OutOfMemory大概是在256MB(預設上限)左右的時候發生的
明天再繼續。
這個工具如何取得明天再補充。