问题描述
在一次项目非功能压力测试过程中。发生内存溢出现象。
通过mat工具分析dump,MemorySessionContext和MemorySessionData占用内存居高不下。
weblogic weblogic.servlet.internal.session.MemorySessionContext
weblogic weblogic.servlet.internal.session.MemorySessionData
MemoryAnalyzer 打开失败,修改内存
MemoryAnalyzer.ini
-Xmx参数修改2048m
原因分析以及解决方案
session对象没有及时回收。
getSession()每次都会创建一个新的session对象,而且使用完并没手动session.invalidate()使session失效,只能等session超时失效后被jvm垃圾回收。
解决方案1
配置文件web.xml 设置 session-timeout:session失效时间。

解决方案2
weblogic.xml

通过各种博客文章的参考,一般尝试方案1就能解决问题。 不行可以尝试方案二
我们项目中的问题 :在Servlet中写下如下代码造成的。
ServletContext servletContext = request.getSession().getServletContext();
ApplicatiionContext ctx = WebApplicatiionContextUtils.getWebApplicationContext(servletContext );
ctx.getBean("xxx");
参考博客:
https://www.jianshu.com/p/05a9e9b71cf9
https://blog.csdn.net/stevendbaguo/article/details/51459599
https://www.cnblogs.com/interdrp/p/5995801.html
本文探讨了一次项目非功能压力测试中遇到的内存溢出问题,重点集中在MemorySessionContext和MemorySessionData。分析指出,getSession()的不恰当使用导致session对象无法及时回收。解决方案包括在web.xml中设置session-timeout或优化Weblogic配置。提供了解决此类问题的代码示例,并引用了相关博客资源。

4700

被折叠的 条评论
为什么被折叠?



