如何发现是什么终止了一个进程?

如何发现是什么终止了一个进程?

我有一个在 VPS 中运行的 Minecraft 服务器,有时我的服务器会意外被关闭。

我不相信这是一个 java 错误,因为没有抛出任何错误,而且当服务器运行良好时就会发生这种情况,我还看到来自我的脚本的消息,该脚本调用 java 命令说该进程已被终止,并且还告诉我进程 id 和被终止的 sh 脚本中的行:

我的脚本:

#!/bin/sh
cd /home/minecraft/server
FILE=mcpc-plus-legacy-1.4.7-R1.1-SNAPSHOT-f534-L31.jar
#LOG="log`date +'%Y-%m-%d.%H:%M:%S'`.log"
while :
do
LOG="log`date +'%Y-%m-%d.%H:%M:%S'`.log"
echo "Iniciando..." >> "$LOG"
rm log-latest.log
ln -s "$LOG" log-latest.log
java -Xmx7680M -Xms4096M -XX:MaxPermSize=192M  -jar "$FILE" 2>> "$LOG"
#-Dcom.sun.management.jmxremote \
#-Dcom.sun.management.jmxremote.port=9010 \
#-Dcom.sun.management.jmxremote.local.only=false \
#-Dcom.sun.management.jmxremote.authenticate=false \
#-Dcom.sun.management.jmxremote.ssl=false \
# -jar "$FILE" >> "$LOG.std.txt"  2>> "$LOG"

echo "Aperte CTRL + C para cancelar"
sleep 5

done

进程被终止时显示的消息:

/home/minecraft/server/acao_iniciar.sh: line 22: 23546 Killed java -Xmx7680M -Xms4096M -XX:MaxPermSize=192M -jar "$FILE" 2>> "$LOG"

没有配置 cronjob,并且last命令没有显示通过 SSH 的任何奇怪的连接。

答案1

一个可能的原因是你的服务器内存不足,并且进程被OOM 杀手这是Linux中的一个机制,当系统内存不足时,它会杀死低优先级的进程。

如果是这种情况,您应该能够通过以下方法修复它:i)减少允许 java 进程占用的内存量,ii)增加进程的优先级(nice -15)或 iii)增加可用内存。

相关内容