锁定老帖子 主题:一天内JVM让服务器内存耗尽
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2015-06-04
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2015-06-06
最后修改:2015-06-06
打出javacore,搜索linkedHashMap,会发现相对应的堆栈,然后着重分析系统业务代码,你这情况 可能是OOM了,目测你们场景有点像查询SQL和 做缓存导致
|
|
返回顶楼 | |
发表时间:2015-06-08
可以先用代码静态分析工具 扫扫
|
|
返回顶楼 | |
发表时间:2015-06-08
你可以查看下程序中用LinkedHashMap的地方有多少,应该不多吧,这个使用的应该不多。主要看一下是使用完了未清理还是逻辑有问题,有限条件不停循环造成的。
|
|
返回顶楼 | |
发表时间:2015-06-08
看看你的LinkedHashMap 是在什么场景被使用了,肯定是使用完了没有做处理造成的,如果做了cache的话,可能是缓存造成了, 另外你的tomcat的jvm是怎么设置的,难道你把jvm设置的极大?
|
|
返回顶楼 | |
发表时间:2015-06-09
btrace 打下 MapEntry的 <init> 方法的调用栈。
或者最简单的,看看entry里的内容既可以猜测出是存放的什么东西。。。。 难道是session?? |
|
返回顶楼 | |
发表时间:2015-06-09
我正好解决过内存泄露的问题:
1.根据Jprofiler的提示,静态检查代码中static的变量和session变量,是否会容纳LinkedHashMap。 2.根据上一步的猜测,建立压力测试,重现问题,如果能重现,那么修改后重测后问题消失,则解决; 如果上一步猜测没有命中,那么就需要模拟典型的用户操作来重现问题。不管怎么样,能用压力测试重现内存耗尽的问题是很重要的一步。然后再逐步缩小测试的范围,直到足够小能抓住问题。 我上次解决的问题是一个已经上线的大系统,花了两周时间。。。 |
|
返回顶楼 | |
发表时间:2015-06-09
1:做一下压力测试吧,如楼上所说,可以缩小问题查找的范围,如问题可重现,那么就剩下修改代码了
2:尽量session中不要存放数据 3:项目启动时看看静态化的一些对象,没必要的就换为实时查询的方式也可 4:调整你的jvm参数,这个参数也很重要的,调整不对也会造成内存泄露的问题 |
|
返回顶楼 | |
发表时间:2015-06-09
jmap dump 内存
mat 分析 |
|
返回顶楼 | |
发表时间:2015-06-10
用eclipse mat分析看看,这工具可以看到这些LinkHashMap被哪些类产生的实例引用了
|
|
返回顶楼 | |