很多时候,在生产环境,客户为了逃避一些资源检测,当内存和CPU 低于某些限值的时候,会被收回,所以需要一些方法来提升CPU使用率。看脚本
#!/bin/bash
# 确保 CPU 使用率在 35% 到 70% 之间 根据实际情况修改
target_min=35
target_max=70
# 计算 CPU 使用率的函数
get_cpu_usage() {
top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}'
}
# 定义计算密集型任务的 PID 变量
cpu_task_pid=0
# 循环直到达到目标 CPU 使用率
while true; do
cpu_usage=$(get_cpu_usage)
# 如果 CPU 使用率低于目标下限,则启动计算密集型任务
if (( $(echo "$cpu_usage < $target_min" | bc -l) )); then
# 如果之前已经有任务在运行,先杀死它
if [[ $cpu_task_pid -ne 0 ]]; then
kill $cpu_task_pid
wait $cpu_task_pid 2>/dev/null # 等待进程结束,忽略错误
cpu_task_pid=0
fi
# 执行计算密集型任务
(while :; do echo "scale=1000; a(1)" | bc -l; done) &
cpu_task_pid=$!
fi
# 如果 CPU 使用率高于目标上限,终止计算密集型任务
if (( $(echo "$cpu_usage > $target_max" | bc -l) )) && [[ $cpu_task_pid -ne 0 ]]; then
kill $cpu_task_pid
cpu_task_pid=0
fi
# 等待一段时间再检查
sleep 2
done
在启动服务的时候可能会报一些错误。
这个错误通常是由于在Windows环境下编写的脚本在Unix或Linux环境下执行时出现的。Windows使用回车符(\r\n)作为行结束符,而Unix和Linux使用换行符(\n)。当你在Windows环境下编写脚本并在Unix或Linux环境下执行时,这些额外的回车符(\r)会被解释为命令的一部分,从而导致错误。
为了解决这个问题,你需要将脚本文件的行结束符从Windows格式转换为Unix格式。这可以通过多种方式实现:
sed -i 's/\r$//' your_script.sh
还有可能会出现一些反斜杠错误,只需要vim 脚本将其中不需要的反斜杠删除就行,当然别忘了chmod +x your_script.sh脚本权限
pkill -f _name.sh 可停止脚本运行,也有其他方法,大家可以gpt搜索