问题描述
在一次项目非功能压力测试过程中。发生内存溢出现象。
通过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