在我的工作中,我们遇到了一个很难再现OOM的问题。或者,更准确地说,它很容易在一个系统上复制,使该系统无法使用,但在其他任何地方复制都很困难,给定相同的输入。
应用程序正在使用服务包装器作为服务运行。我们确实通过在OOM上输出堆转储文件的选项更改了配置以启动它,但不幸的是,它们被截断了,很可能是由于服务包装器在写入文件时超时并终止了进程。这是显而易见的,因为最大内存被设置为1GB,hprof文件小到700MB,这太小了,不能成为OOM上的整个堆。
wrapper.jvm_exit.timeout=600
wrapper.shutdown.timeout=600
谢谢你抽出时间!
分析到目前为止我遇到的转储文件的最佳选择是像Vim这样的文本编辑器。
问题内容: 我想编写一个程序(最好在Java中),以分析和分析Java堆转储文件(由jmap创建)。我知道已经有很多很棒的工具(jhat,eclipse的MAT等),但是我想从特定的角度分析应用程序中的堆。 在哪里可以阅读有关堆转储文件的结构,如何读取该文件的示例等?找不到有用的搜索内容… 非常感谢。 问题答案: 我不熟悉jhat,但是Eclipse的MAT是开源的。他们的SVN链接可用,也许您可
我想写一个程序(最好是在java中),它将解析和分析一个java堆转储文件(由jmap创建)。我知道有很多很棒的工具已经这样做了(jhat,eclipse的MAT,等等),但是我想从一个特定的角度来分析堆到我的应用程序。 我在哪里可以阅读堆转储文件的结构,示例如何阅读它,等等?没有找到任何有用的搜索... 非常感谢。
Eclipse Memory Analyser文档称它可以打开IBM便携堆转储文件(*.phd):
在使用Java的生产中,我经常遇到一些完全的GC问题,我怀疑内存是由网络库分配来缓冲TCP请求结果的。 我已经在内存使用率很高(大约8GB)时转储了Java堆。我尝试用eclipse MAT分析。hprof文件,该文件大约有8GB。 由于eclipse MAT没有显示完整的堆转储内容,我不知道如何找到应用程序占用这么多内存的原因。
我一直在分析我们服务的Java.lang.OutofMemoryError:Java堆空间,并试图通过Eclipse MAT工具挖掘堆转储。 我们的服务使用8G堆运行,生成的堆转储的大小只有500 MB。
问题内容: 我的生产服务器运行时带有以下标志: -XX:+ HeapDumpOnOutOfMemoryError 昨晚,当我们的服务器遇到堆错误时,它生成了一个java-38942.hprof文件。事实证明,系统开发人员知道该标志,但无法从中获取任何有用的信息。 有任何想法吗? 问题答案: 如果您想要一个相当高级的工具来认真研究一下,请查看Eclipse 的Memory Analyzer项目 ,该