在项目中发现full gc非常频繁。达到了每分钟13次。我怀疑可能会有内存泄露。于是在晚上找了内存泄露的资料。

内存长期占用并导致系统不稳定一般有两种可能:

1. 对象被大量创建而且被缓存,在旧的对象释放前又有大量新的对象被创建使得内存长期高位占用。

  • 表现为:内存不断被消耗、在高位时也很难回归到低位,有大量的对象在不断的创建,经过很长时间后又被回收。例如:在HttpSession中保存了大量的分页查询数据,而HttpSession的会话超时时间设置过长(例如:1天),那么在旧的对象释放前又有大量新的对象在第二天产生。
  • 解决办法:对共享的对象可以采用池机制进行缓存,避免各自创建;缓存的临时对象应该及时释放;另一种办法是扩大系统的内存容量。

2. 另一种情况就是内存泄漏问题

  • 表现为:内存回收低位点不断升高(以每次内存回收的最低点连成一条直线,那么它是一条上升线);内存回收的频率也越来越高,内存占用也越来越高,最终出现"Out of Memory Exception"的系统异常。
  • 解决办法:定位那些有内存泄漏的类或对象并修改完善这些类以避免内存泄漏。方法是:经过一段时间的测试、监控,如果某个类的对象数目屡创新高,即使在JVM Full GC后仍然数目降不下来,这些对象基本上是属于内存泄漏的对象了。

那么就要使用Jconsole去监控weblogic的jvm.

由于jconsole和weblogic都在同一台windows机器上,所以配置步骤如下:

1. 首先是要配置WebLogic的启动脚本。

D:\weblogic\domains\cebbch_domain\bin\startWebLogic.cmd

在其中找到

set JAVA_OPTIONS=%SAVE_JAVA_OPTIONS%后,添加一句话,变成:

set JAVA_OPTIONS=%SAVE_JAVA_OPTIONS%   -Dcom.sun.management.jmxremote

2. 在weblogic的控制台找到

域>安全>启用匿名管理员查找 ,并将其前面的方格勾上

3. 然后启动jconsole,找到weblogic server的进程号,就可以连接成功了。否则,只能连接sun.tools.jconsole.Jconsole。

至此,jconsole已经可以成功连接weblogic 了。

05-11 08:33