我有一个在 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)增加可用内存。