[原创]OOM典型案例的服务内存溢出调查报告_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4927 | 回复: 0   主题: [原创]OOM典型案例的服务内存溢出调查报告        下一篇 
funny
注册用户
等级:中校
经验:1529
发帖:111
精华:4
注册:2013-3-13
状态:离线
发送短消息息给funny 加好友    发送短消息息给funny 发消息
发表于: IP:您无权察看 2014-2-20 11:06:10 | [全部帖] [楼主帖] 楼主

1.概述

在日常维护工作中,发现bssframe_194_0的状态为空白,下面对其存在的问题进行分析。

2.问题分析


2.1.检查服务响应

使用weblogic自带检测工具查看,发现该服务已无法响应,如下:

北京联动北方科技有限公司

2.2.检查线程快照

通过kill -3 获取线程快照,并未发现死锁线程,只是线程处于获取内存阶段。

2.3.检查堆内存

通过jmap获取当前堆内存使用情况,如下所示:

Heap Usage:
PS Young Generation
Eden Space:
capacity = 79560704 (75.875MB)
used     = 74917464 (71.44686126708984MB)
free     = 4643240 (4.428138732910156MB)
94.16390282318267% used
From Space:
capacity = 79495168 (75.8125MB)
used     = 0 (0.0MB)
free     = 79495168 (75.8125MB)
0.0% used
To Space:
capacity = 79495168 (75.8125MB)
used     = 0 (0.0MB)
free     = 79495168 (75.8125MB)
0.0% used
PS Old Generation
capacity = 1908932608 (1820.5MB)
used     = 1908930808 (1820.4982833862305MB)
free     = 1800 (0.00171661376953125MB)
99.99990570646693% used
PS Perm Generation
capacity = 82182144 (78.375MB)
used     = 82000104 (78.2013931274414MB)
free     = 182040 (0.17360687255859375MB)
99.77849202863338% used


经查看当前服务堆内存已经占用到99.9%,如上图黄色显示。可以看出服务发生了内存溢出错误,导致JVM内部频繁进行GC导致JVM hang无法响应请求。

从服务日志中也出现了大量的内存溢出错误日志,如下所示:

####<2013-2-21 上午10时27分54秒 CST> <Info> <WebLogicServer> <crmweb2> <bssframe_194_01> <[STUCK] ExecuteThread: '44' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1361413674052> <BEA-000339> <[STUCK] ExecuteThread: '44' for queue: 'weblogic.kernel.Default (self-tuning)' has become "unstuck".> 
####<2013-2-21 上午10时27分12秒 CST> <Error> <HTTP> <crmweb2> <bssframe_194_01> <[ACTIVE] ExecuteThread: '41' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1361413632963> <BEA-101017> <[weblogic.servlet.internal.WebAppServletContext@1c4f6f6 - appName: 'bssframe', name: 'bssframe', context-path: '', spec-version: 'null'] Root cause of ServletException.
java.lang.OutOfMemoryError: GC overhead limit exceeded
>
####<2013-2-21 上午10时27分00秒 CST> <Error> <Server> <crmweb2> <bssframe_194_01> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1361413620854> <BEA-002608> <The ListenThread because of an error: java.lang.OutOfMemoryError: GC overhead limit exceeded
java.lang.OutOfMemoryError: GC overhead limit exceeded
>
####<2013-2-21 上午10时25分55秒 CST> <Error> <HTTP> <crmweb2> <bssframe_194_01> <[STUCK] ExecuteThread: '10' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1361413555219> <BEA-101017> <[weblogic.servlet.internal.WebAppServletContext@1c4f6f6 - appName: 'bssframe', name: 'bssframe', context-path: '', spec-version: 'null'] Root cause of ServletException.
java.lang.OutOfMemoryError: GC overhead limit exceeded
>


3.结论及建议


3.1分析结果

从上述分析确定为内存溢出错误导致堆内存占用较多,导致频繁进行垃圾回收从而导致服务hang无法响应,但是由于该服务处于集群中,因此并未对业务造成影响。

而分析产生的堆内存快照并未发现产生内存泄漏情况,推断为当时业务较为繁忙而该服务响应了几个会产生较大数据的请求,导致该服务比其他服务的堆内存占用高而出现内存溢出。

3.2.相关建议

在2.3中堆内存的PERM区占用99%,该问题已提出很多次,希望可以对该参数进行调整。

查看配置信息可以看出,初始的PERMSIZE是16M,当启动Weblogic时如果有PERMSIZE不足,会逐渐增大,但是当启动完成时如果出现PERMSIZE不足时,会引起FULL GC,而FULL GC会出现应用的短暂的业务停滞情况。这种情况应该尽量避免。

因此建议将PERMSIZE增加到128M,在启动参数修改即可。

具体修改的方法为(以custmanm_201_01为例):

点击custmanm_201_01进入statserv_206_01配置页面:

北京联动北方科技有限公司

点击进入Server Start进入启动参数设置界面,主要修改的参数为:

北京联动北方科技有限公司

将上图中的-XX:MaxPermSize=256m参数修改为-XX:PermSize=256m,或者在-XX:MaxPermSize=256m前面添加-XX:PermSize=256m。

该贴被funny编辑于2014-2-20 11:07:06

该贴被funny编辑于2014-2-20 11:08:04



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论