Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在生产环境中调试java heap OutOfMemory错误?_Java_Profiling - Fatal编程技术网

如何在生产环境中调试java heap OutOfMemory错误?

如何在生产环境中调试java heap OutOfMemory错误?,java,profiling,Java,Profiling,我们的web应用程序在tomcat7中运行,我们使用的是java 1.7.055……在过去,当我们遇到问题时,我们能够在开发环境中使用Eclipse和分析器进行调试(我现在不记得这个名字) 现在,我们的生产环境中出现了OutOfMemory异常。我对在生产环境中运行探查器非常谨慎,所以我的问题是……有没有办法在不使用探查器的情况下在生产环境中调试此问题,或者有没有重量足够轻的东西可以在生产环境中运行它?只需转储一堆生产服务器并使用Eclipse内存进行分析即可分析工具。您可以将heapdump复

我们的web应用程序在tomcat7中运行,我们使用的是java 1.7.055……在过去,当我们遇到问题时,我们能够在开发环境中使用Eclipse和分析器进行调试(我现在不记得这个名字)


现在,我们的生产环境中出现了OutOfMemory异常。我对在生产环境中运行探查器非常谨慎,所以我的问题是……有没有办法在不使用探查器的情况下在生产环境中调试此问题,或者有没有重量足够轻的东西可以在生产环境中运行它?

只需转储一堆生产服务器并使用Eclipse内存进行分析即可分析工具。您可以将heapdump复制到本地服务器。是这项工作的最佳工具。然而,试图让UI远程运行是非常痛苦的。启动Eclipse和更新UI是JVM的额外负载,JVM已经在忙于分析30G堆转储。幸运的是,MAT附带了一个脚本,可以解析堆转储并生成HTML报告,而无需启动Eclipse


.

设置更高的Xmx限制


-Xmx2048M或更多(如果需要)。

如果您想在生产环境中评测应用程序,可以从生产系统中使用jConsole for real histogram。如果你能支付,你应该试试jProfiler()。这对于在生产环境中转储JVM数据非常有帮助。

如果您非常关心在生产环境中运行探查器,请运行jmap-histo:live-pid

直方图是堆的汇总,它的权重非常小,为您生成数据所需的时间也非常少。如果没有设置HeapDumpOnAutofMemoryError,这将非常有用

在OOME上倒垃圾总是比较好的 Java提供了一个系统开关,通过标志-XX:+HeapDumpOnOutOfMemoryError来实现这一点。这将生成堆转储文件

堆转储文件包含其中所有与对象相关的信息。使用jhat可以很容易地对其进行分析。这将打开转储文件,分析数据,并监听控制台中显示的端口

如果配置了GC日志,请查看GC日志并确定内存消耗显著增加的时间。从日志中尝试识别tomcat完成的操作/处理的请求,检查代码并尝试识别代码中是否存在任何内存泄漏。您可以使用直方图作为参考,因为histo还提供对象计数

如果在应用程序中使用某些缓存,请检查为缓存配置的最大大小,或者是否定期清除缓存

希望这是有帮助的