Oracle BIEE10g内存溢出问题分析一例


BIEE10g内存溢出

问题描述

报表服务器weblogic后台访问不了,报了这个错误:

警告: callRPC 4java.io.IOException: end  of file

2012-12-4 12:32:17 oracle.bi.utilitycomm.SocketPool$HeartBeatTasksendHeartBeat

警告: miss heart beat from server count 3

<2012-12-4 下午12时32分59秒 CST><Warning><Socket><BEA-000449><Closing socket

as no data read from it during the configured idle timeout of 5 secs>

2012-12-4 12:37:11 oracle.bi.utilitycomm.SocketPool$HeartBeatTasksendHeartBeat

严重: server is shutdown

Exception in thread "Timer-18734" java.lang.OutOfMemoryError: Java heap space

2012-12-4 12:47:33 oracle.bi.utilitycomm.RpcClientcallRPC

警告: callRPC 4java.io.IOException: end  of file


重启之后又恢复正常。 


问题分析

通过分析日志,发现

####<2012-12-4 上午11时35分28秒 CST> <Info> <Health> <hxpddc03> <dcserver> <weblogic.GCMonitor> <<anonymous>> <> <> <1354592128866> <BEA-310002> <11% of the total memory in the server is free>  

即2012-12-4 上午11时35分28秒这时分配给weblogic的内存已经使用了89%,目前报表服务器(内存为32G)分配给报表应用服务的内存为2G,因此剩余内存为225.28M

柜员号为00174的用户于2012-12-4 上午11时41分48秒 CST  查询报表名为36_各类交易清单的报表,由于数据量太大,内存剩余不足,造成导出excel超时

柜员号为00174的用户与2012-12-4 上午11时42分58秒 CST 再次查询名为36_各类交易清单的报表,再次超时

之后用户可能频繁的点查询,出现多个线程队列。

由于"weblogic.kernel.Default"是从客户端提交请求后产生的线程所在的队列名。这个队列的线程数默认是15个。如果超过15个线程堵塞,则部署的应用将不能访问,

同时后台报:

####<2012-12-4 下午12时32分59秒 CST> <Warning> <Socket> <hxpddc03> <dcserver> <[STANDBY] ExecuteThread: '38' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1354595579038> <BEA-000449> <Closing socket as no data read from it during the configured idle timeout of 5 secs> 

此时domain的控制台已经无法访问

如果发送该请求较多,很有可能会导致weblogic的线程阻塞,严重会引起weblogic挂起现象。 

最终导致内存溢出

###<2012-12-4 下午03时34分54秒 CST> <Error> <HTTP Session> <hxpddc03> <dcserver> <[STANDBY] ExecuteThread: '22' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1354606494023> <BEA-100026> <An unexpected error was raised in HTTP session timeout callback, while checking session expiration.

java.lang.OutOfMemoryError: Java heap space


问题解决

对于以上问题通过以下几种方法解决: 

1)修改StuckThreadMaxTime参数,将默认的600s改成1200s,或者其它适合的值。 

2)增大线程数,防止线程阻塞问题。 

3)优化程序,减少处理时,对全行查询报表增加过滤条件,减少查询全行交易数据

4)查看报表服务器的weblogic调用的JDK版本,如果为32位,请跟新为64位的JDK,(因为32位的JDK最多使用的内存为2G)

5)修改weblogic启动服务调用的批处理setDomainEnv.cmd文件中MaxPermSize内存大小改为机器内存物理的一半


    以上,整理自huchao提问&wupw回答,致谢。

来源: 浩仔
标签: BIEE BIP 内存溢出

评论列表

暂无评论

需要先登录后才可以进行评论

登录 注册

他的最新发表

更多

他的热门文章

更多