Java 为什么不生成OutOfMemoryError?

Java 为什么不生成OutOfMemoryError?,java,linux,shell,out-of-memory,Java,Linux,Shell,Out Of Memory,我的java编写的应用程序在工作一段时间后被“杀死” Java应用程序是从运行了一段时间的Linux下的SH脚本启动的。之后,PID显示并显示“killed”字样 像这样: runMyServer.sh: line 3: 3593 Killed java -Xmx2024m -cp ... 系统日志中有关于内存不足事件的信息。所以看起来像是内存不足错误 我的问题是:当OutOfMemyError异常不能生成时?您的系统上可能内存太少,或者运行的进程耗尽了所有ram和交换。当GN

我的java编写的应用程序在工作一段时间后被“杀死”

Java应用程序是从运行了一段时间的Linux下的SH脚本启动的。之后,PID显示并显示“killed”字样

像这样:

runMyServer.sh: line 3: 3593 Killed         java -Xmx2024m -cp ...
系统日志中有关于内存不足事件的信息。所以看起来像是内存不足错误


我的问题是:当OutOfMemyError异常不能生成时?

您的系统上可能内存太少,或者运行的进程耗尽了所有ram和交换。当GNU/Linux内存不足时,它将杀死使用大量内存的进程。这基本上只是在进程上终止,因此不是Java进程内存不足,而是操作系统。

为了避免Java应用程序被OOM杀手终止,只需向系统添加足够的交换,并禁用内存过度匹配

dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile               swap                    swap    defaults        0 0" >> /etc/fstab
echo 2 > /proc/sys/vm/overcommit_memory

系统日志中的条目看起来像什么?可以将其粘贴到此处吗?请尝试在不使用.sh脚本的情况下运行应用程序。我认为它是生成的,只是没有显示。@11684当应用程序被称为“killed”时,我如何再现这种情况?请注意,只有当Java堆增长到其允许的最大大小,并且您仍然需要新对象的空间时,您才能得到OutOfMemoryError。相反,如果您的应用程序耗尽了操作系统分配的内存空间,操作系统将在不发出Java异常信号的情况下终止该应用程序。我不想将其中断给您,但您会发现有许多事情是无法控制的。如何防止系统终止我的程序?为什么它不杀死别的东西?我有6G,我的java堆限制为2G。@Dims您有多少可用内存?是否有其他进程使用相同数量或更多的ram?基本上,ram/cpu时间最大的进程被杀死,因此ram越多,cpu越少,被杀死的可能性越高。您的java价格使用多少ram,它将使用比堆更多的内存。这里有更多的信息,我有另一个进程,其中一个是我的,想要3G。我知道我可能记性不够,但我想控制局面。。。