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。