使用过多内存或CPU的超时过程

使用过多内存或CPU的超时过程

在 linux/unix 服务器上创建某种使用大量内存或 cpu 的超时程序有多难?你需要做什么才能做到这一点?

这种情况经常发生。我知道如果您正在使用大量资源做某事,您可能需要完整的资源。但是,当你让某个东西运行超过 3 天时,这绝对是荒谬的。如果您无法在一个小时内完成您所做的事情,那么您应该使用个人服务器。数百人需要使用该服务器,从屏幕截图中可以看出,这是一个资源有限的旧服务器。一个小时后你能想出办法阻止这种情况吗?在这种情况下,该人使用了 99.9% 的服务器。

在此输入图像描述

答案1

这个怎么样?它可能需要一些调整,但我相信您可以以此为起点来解决这个问题。您可以从 cron 运行它。如果由于某种原因它不起作用,则可能是由于网站而导致的格式错误。

#!/bin/bash                                                                                                                                                                                               

# 内部字段分隔符                                                                                                                                                                                
IFS=“                                                                                                                                                                                                     


# 设置
minUid=1000 # 要杀死的最小UID(保护服务和root)
maxCpu=25 # 进程在 $maxTime 内可以消耗的最大 %CPU
maxTime=3600 # 进程可以运行的最大时间,以秒为单位

# 加载并格式化进程列表
psList=$(ps -eo pid,uid,pcpu,etimes,args | awk '{ print $1" "$2" "$3" "$4" "$5}' | tail -n+2)

回声 请稍候...

# 对每个进程执行此操作
对于 $psList 中的进程;做 {
        pid=$(echo $process | cut -d' ' -f1) #pid
        uid=$(echo $process | cut -d' ' -f2) #uid
        cpu=$(echo $process | cut -d' ' -f3) #cpu 使用情况
        cpu=$(printf "%.0f" $cpu) #将浮点数转换为整数
        etimes=$(echo $process | cut -d' ' -f4) #自pid启动以来经过的时间
        cmd=$(echo $process | cut -d' ' -f5) #命令名称

        # 检查UID是否可以杀死
        如果 [ $pid -ge $minUid ];然后 {

                # 检查是否符合时间+cpu使用限制
                if [ $etimes -ge $maxTime ] && [ $cpu -ge $maxCpu ] ;然后 {
                        # 确定要杀死的进程
                        echo "kill pid=$pid uid=$uid cpu=$cpu etimes=$etimes cmd=$cmd"
                        杀死 -KILL $pid
                } fi
        } fi


} 完毕

相关内容