需要知道"OutOfMemoryError : Java Heap Space"的根本原因



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

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

并且端口8080中的一个不时地处于紧密等待中。

请说明问题的根本原因。

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

kill -3 <process_id>

其中<process_id>是进程的pid。你可以用找到它

ps aux | grep java

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

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

以在每次出现OutOfMemory错误时自动生成进程的线程转储。

无论运行的平台是Linux、Windows还是任何其他平台,都可以拥有有限堆。Java分配有限的内存来运行程序。该存储器空间可以被划分为两个区域。

  1. 堆:存储对象
  2. PermSpace:存储用户类的元数据

您可以通过传递参数来初始化堆和PermSpace"-XX:MaxPermSize"您可以通过传递参数来初始化堆大小"-Xmx"如果您不进行初始化,JVM将为您的应用程序分配默认内存。

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

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

JVM在java堆内存用完时抛出"OutOfMemoryError"

解决OutOfMemoryError:java堆空间,(简单方法)

通过设置JVM参数"-Xms"和-Xmx"来增加堆大小-最小和最大堆大小

检查当前值并像"-Xmx1024M"一样增加

如果它没有解决,那么它一定是由于内存泄漏(idk更多关于如何修复内存泄漏的信息)为了更好地理解,请参阅:Java堆空间

相关内容

  • 没有找到相关文章

最新更新