我在一台 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(最大用户进程)很重要。