运行应用程序时出现 java.lang.OutOfMemoryError

运行应用程序时出现 java.lang.OutOfMemoryError

我在一台 Linux Red Hat 机器上,试图运行一个启动 Java 应用程序的 shell 脚本。它昨天运行得很好,但今天我收到此错误:

Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:714)
    at java.lang.ref.Reference.<clinit>(Reference.java:162)

免费-m

total       used       free     shared    buffers     cached
Mem:         15951      14754       1196         66        217       3208
-/+ buffers/cache:      11328       4622
Swap:        15999          0      15999

我读了很多关于这个问题的资料,但我不知道如何在我的系统上解决这个问题。这似乎是系统资源问题。有人能帮忙吗?

答案1

这个问题我们很难回答,因为我们不知道你的程序在做什么。但归根结底,这java.lang.OutOfMemoryError通常是由你的应用流量激增或内存泄漏引起的。

您应该尝试使用两个指定 Java 虚拟机内存分配池的 Java 标志:(-Xmx分配的最大内存)和-Xms(分配的初始内存)

尝试一下这些数字,看看有什么效果。如果看到错误java.lang.OutOfMemoryError,则只需增加内存数量并重新启动 Java 进程。

答案2

您正在指定-Xmx128m实例化 JVM 的时间。尝试增加该值。

答案3

检查为用户设置的最大打开文件数。您可能需要增加该值。使用 pidstat 来获取进程 ID(pidstat -h -r -u -p $javapid | grep -v“命令”)和正在运行的进程数(ps aux | grep 'java ' | grep“应用程序名称”| grep -v grep | wc -l)。为用户设置的 MUP(最大用户进程)很重要。

相关内容