1

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

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

并且其中一个端口 8080 时不时地进行密切等待。

请提出问题的根本原因。

4

3 回答 3

2

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

kill -3 <process_id>

您的进程的 pid在哪里<process_id>。您可以通过以下方式找到它:

ps aux | grep java

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

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

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

于 2015-03-19T07:32:12.730 回答
1

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

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

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

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

于 2015-03-19T07:13:16.843 回答
0

java.lang.OutOfMemoryError:Java Heap Space :通常是由于系统内存不足(对于 JVM)而发生的,有时也可能是由于内存泄漏(编程)而发生的。

JVM 用完 Java 堆内存时抛出“OutOfMemoryError”

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

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

检查当前值并像“-Xmx1024M”一样增加它

如果它没有解决,那么它一定是由于内存泄漏(idk more about how to fix memory leak)为了更好地理解,请参阅:Java Heap Space

于 2015-03-19T07:04:27.367 回答