经过一段时间的工作,我的 java 编写的应用程序被“杀死”了。
Java 应用程序是从 Linux 下的 SH 脚本启动的,该脚本运行了一段时间。之后显示PID并说“杀死”字样。
像这样:
runMyServer.sh: line 3: 3593 Killed java -Xmx2024m -cp ...
系统日志中有关于内存不足事件的信息。所以它看起来像内存不足错误。
我的问题是:什么时候不能生成 OutOfMemroyError 异常?
经过一段时间的工作,我的 java 编写的应用程序被“杀死”了。
Java 应用程序是从 Linux 下的 SH 脚本启动的,该脚本运行了一段时间。之后显示PID并说“杀死”字样。
像这样:
runMyServer.sh: line 3: 3593 Killed java -Xmx2024m -cp ...
系统日志中有关于内存不足事件的信息。所以它看起来像内存不足错误。
我的问题是:什么时候不能生成 OutOfMemroyError 异常?
您的系统上的内存可能太少,或者运行的进程会耗尽所有内存和交换。当 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