web 項目使用weblogic9.2做爲服務器, 出現了out of memory 問題, 這時就引發了需要監控JVM內存使用情況. 本來一開始使用jprofiler ,但是隻能免費10天... 10天能幹什麼,難道我們程序員就不過週末了??萬惡的jprofiler公司. 還好JDK1.5有jconsole.
步驟:
1. weblogic服務是"startWebLogic.cmd" 程序來啓動的 , 要想連接到jconsole必須設置com.sun.management.jmxremote 參數.
運行->startWebLogic.cmd -Dcom.sun.management.jmxremote
或者在快捷方式加上也可以:
2.運行->jconsole
3.選擇監控服務
4.OK,連接成功,如下圖
記錄一點Out Of Memory 原因:
堆是應用程序使用的主要部分,一旦堆滿,應用程序就會拋出Out Of Memory錯誤。具體關於堆的構成以及垃圾回收算法,可以參考文檔:
http://aleung.blogbus.com/logs/4712392.html
這個環節的優化:
1) 增加JVM內存,使得可使用的堆內存儘可能多,延長垃圾回收的時間。需要注意的是,一般來說,回收1G內存所需要的時間是7秒左右,如果這個時間訪問量比較高,極容易導致應用停止響應,所以並非是越大內存越好。
通過增加 XX:+PrintGCDetails 參數可以觀察到垃圾回收的頻率和時間2) 調整垃圾回收策略,加快JVM的回收,因爲Web應用響應高,很多都是無用內存,加快回收可以保證有效堆會更多,這種方式會消耗更多的CPU。