我在linux机器上遇到以下错误。
Exception in thread "http-8080-Processor17" java.lang.OutOfMemoryError:Java Heap Space
并且其中一个端口8080偶尔会等待。
请提出问题的根本原因。
答案 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分配有限数量的内存来运行程序。 这个存储空间可以分为两个区域。
您可以通过传递参数来初始化堆和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