需要知道" OutOfMemoryError:Java堆空间"的根本原因。

时间:2015-03-19 06:36:40

标签: java tomcat catalina.out

我在linux机器上遇到以下错误。

Exception in thread "http-8080-Processor17" java.lang.OutOfMemoryError:Java Heap Space

并且其中一个端口8080偶尔会等待。

请提出问题的根本原因。

3 个答案:

答案 0 :(得分:2)

为了找到内存异常背后的原因,您可以对应用程序进行线程转储。要获取线程转储,请执行以下命令:

kill -3 <process_id>

其中<process_id>是您流程的pid。您可以通过以下方式找到它:

ps aux | grep java

或任何其他可用工具。线程转储将被发送到标准输出流,而不会终止进程。因此,您可以分析日志。 您还可以使用以下JVM选项:

-XX:OnOutOfMemoryError="kill -3 %p"

在每个OutOfMemory错误时自动生成进程的线程转储。

答案 1 :(得分:1)

无论您运行的是什么平台,无论是Linux还是Windows或任何其他平台,您都可以拥有有限堆。 Java分配有限数量的内存来运行程序。 这个存储空间可以分为两个区域。

  1. 堆:存储对象。
  2. PermSpace:存储用户类的元数据。
  3. 您可以通过传递参数来初始化堆和PermSpace  “-XX:MaxPermSize参数” 您可以通过传递参数来初始化堆大小  “-Xmx” 如果您没有初始化JVM将为您的应用程序分配默认内存。

    您可以选中使用Java Memory Profiler来检查程序的哪个部分在内存中占用更多空间。

答案 2 :(得分:0)

  

java.lang.OutOfMemoryError:Java堆空间:通常由于缺乏而发生   系统内存(对于JVM),有时它也可能由于内存而发生   泄漏(编程)。

JVM抛出&#34; OutOfMemoryError&#34;什么时候用完了java堆内存

解决OutOfMemoryError:java heap Space,(简单方法)

  

通过设置JVM参数来增加堆大小&#34; -Xms&#34;和-Xmx&#34; -   最小和最大堆大小

检查当前值并将其增加为&#34; -Xmx1024M&#34;

如果它没有解决那么它必然是由于内存泄漏(idk更多关于如何修复内存泄漏) 为了更好地理解,请参阅:Java Heap Space