shell脚本:定时干死进程并重启
shell脚本:定时干死进程并重启
这是记录我写的第一个shell脚本。
一、写此脚本的原因:最近服务器发生了一次崩溃,已经无法连接到服务器。

后来了解到出现这种情况,主要是因为进程跑满了,memory被消耗光了,无法为其进行操作,包括vnc操作命令和SSH连接分配内存。
有一些解决方法:
- 重启服务器。
- 修改最大进程数后系统恢复。
echo 1000000 > /proc/sys/kernel/pid_max:修改pid_max值为1000000 echo
"kernel.pid_max=1000000 " >> /etc/sysctl.confsysctl -p:设置永久生效
二、分析并解决的方法
- 我并没有选上述的解决方法,但是已经出现cannot allocate memory这种情况只能是重启服务器了。
- 为了避免这种情况(无法连接或执行指令导致项目功能不能正常使用)的发生,我选择对那些持续运行的多线程复杂项目进行定时的释放资源。写了如下脚本,提供参考。

执行命令:
1、chmod +x restart-bida-macd-datasource-huobi.sh
2、nohup ./restart-bida-macd-datasource-huobi.sh > sh.out &
附:bash代码块
#!/bin/bashwhile true; dosleep `expr 6 \* 60 \* 60`date=`date "+%Y-%m-%d %H:%M:%S"`pid=`ps -ef | grep "bida-macd-datasource-huobi.jar" | grep -v "grep" | awk '{print $2}'`if [ -z "$pid" ]; thenecho "$date pid does not exist!"elseecho "$date pid:$pid is running!"kill -9 $pid> nohup.outnohup java -jar -XX:+UseConcMarkSweepGC bida-macd-datasource-huobi.jar > nohup.out &fipidMax=`sysctl kernel.pid_max`pidNum=`ps -eLf|wc -l`echo "$pidMax pidsNum:$pidNum"
done
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
