在CentOS系统中,Java恢复可以通过以下几种方法进行:
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/home/logs/gc-${POD_IP}-$(date '+%s').log
-XX:OnOutOfMemoryError=/home/restart.sh
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/logs/dump-${POD_IP}-$(date '+%s').hprof
这些参数可以帮助在出现问题时迅速自动重启服务,并留下事故现场进行分析。top
和jstack
命令:
通过top -Hp <PID>
查看线程资源占用情况,使用jstack <PID>
获取线程调用栈,定位并解决死循环等问题。restart.sh
,检查Java进程是否运行,如果未运行则重启服务。#!/bin/sh
export JAVA_HOME=/usr/java/jdk1.8.0_152
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/dt.jar:$JAVA_HOME/tools.jar
jarDir="/home"
jarFile="wuliaokankan.cn-1.1-0.0.1.jar"
logFile="/home/logs/restart.log"
restart() {
cd $jarDir
if [ ! -f $jarFile ]; then
echo "jar not exist" >> $logFile
return
fi
(java -jar $jarFile &)
}
check() {
count=$(ps -ef | grep $jarFile | grep -v "grep" | wc -l)
if [ $count -gt 0 ]; then
echo "$(date): $jarFile is running" >> $logFile
else
restart $jarDir $jarFile
echo "$(date): $jarFile is down. restarting" >> $logFile
fi
}
check $jarDir $jarFile
使用crontab -e
将该脚本加入系统定时任务,每小时检查一次Java进程状态。通过上述方法,可以在CentOS系统中有效地进行Java服务的恢复和数据的管理。