shell脚本:定时干死进程并重启

shell脚本:定时干死进程并重启


这是记录我写的第一个shell脚本。

一、写此脚本的原因:最近服务器发生了一次崩溃,已经无法连接到服务器。
在这里插入图片描述

后来了解到出现这种情况,主要是因为进程跑满了,memory被消耗光了,无法为其进行操作,包括vnc操作命令和SSH连接分配内存。

有一些解决方法:

  1. 重启服务器。
  2. 修改最大进程数后系统恢复。
    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/bash

while true; do

        sleep `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" ]; then

                echo "$date pid does not exist!"
        else
                echo "$date pid:$pid is running!"

                kill -9 $pid

                > nohup.out

                nohup java -jar -XX:+UseConcMarkSweepGC bida-macd-datasource-huobi.jar > nohup.out &
        fi

        pidMax=`sysctl kernel.pid_max`

        pidNum=`ps -eLf|wc -l`

        echo "$pidMax pidsNum:$pidNum"
done

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值