首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个月内出现两次堆空间不足错误。java

一个月内出现两次堆空间不足错误。java
EN

Stack Overflow用户
提问于 2017-09-13 10:47:49
回答 2查看 93关注 0票数 0

我有一个企业应用程序,我正在处理它,目前它在登台环境中。服务器有24 GB的RAM。但平均15-20天后,服务器宕机,我们在服务器日志中看到内存空间不足错误。我使用的是J2EE、spring、hibernate、memcache、ehcache、mysql和tomcat8。我使用nginx进行集群,tomcat服务器有3个节点。

请建议/帮助我应该做什么,因为我无法跟踪/获取此错误的来源和发生内存泄漏的位置。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-09-13 10:53:49

您的程序可能正在分配堆中的许多对象,并且永远不允许垃圾收集器释放它们。

要进行诊断,您可以对您的服务执行堆转储,这可以使用以下命令完成:

代码语言:javascript
复制
jmap -dump:format=b,file=dump.bin <pid>

其中,<pid>是您的Java服务的进程id (您可以使用命令ps faux | grep java找到它)。

然后,您可以使用VisualVM打开文件dump.bin并检查它,以查看哪些对象正在使用您的堆中的大部分内容。

因为堆转储将很大,并且将包括准备进行垃圾收集的对象,所以您可能希望告诉jmap只将那些不能被垃圾收集的对象放入堆转储中,这可以通过向jmap命令添加标志live来完成:

代码语言:javascript
复制
jmap -dump:live,format=b,file=dump.bin <pid>

下面是使用VisualVM检查堆转储的说明:https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/heapdump.html

票数 1
EN

Stack Overflow用户

发布于 2017-09-13 10:53:07

使用how-to-collect-a-heap-dump获取堆转储,使用名为Mat的eclipse工具对其进行分析。这将使你清楚地了解你的内存,并让你知道在你的代码中导致OOM错误的地方是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46188057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档