目录
目录X
联系信息 首页 /正文内容

linux下故意提高CPU占用

AI摘要(BLUF)
为防止云平台或系统回收闲置资源,可通过临时提高CPU占用实现。使用stress工具可快速增加CPU负载,安装后根据CPU核心数启动相应数量的进程,例如8核CPU启动4个进程可使整体CPU达到50%。为实现动态控制,可编写Shell脚本实时监控CPU使用率,并根据预设上下限自动调节负载,避免CPU过高或过低,确保资源占用稳定在目标范围,从而有效防止系统误判资源闲置。

问题分析:临时提高CPU占用,防止云平台或系统回收闲置资源

处理办法:使用stress工具来提高CPU占用

1.安装stress

yum  install  -y   stress

或者离线安装  rpm   -ivh  stress-1.0.4-21.ky10.aarch64.rpm

2.查看你的 CPU 核心数

nproc

假设输出为 8(即 8 核 CPU)

3.计算并启动进程

#如果想让整体 CPU 达到 50%:启动核心数一半的进程。8核就启动 4个进程:

nohup stress -c  4 > /dev/null 2>&1 &

4.如何安全停止

pkill -9 stress

效果如下:

    如果想要动态控制让效果真实一点,使用shell脚本来控制cpu占用

1.创建动态控制脚本


#!/bin/bash TARGET_LOW=30   # 目标下限:低于此值增加负载 TARGET_HIGH=70  # 目标上限:高于此值减少负载 CHECK_INTERVAL=3 # 每3秒检测一次 # 获取当前系统整体 CPU 使用率(支持多核) get_cpu_usage() {    read cpu user nice system idle iowait irq softirq steal guest guest_nice < /proc/stat    sleep 1    read cpu user2 nice2 system2 idle2 iowait2 irq2 softirq2 steal2 guest2 guest_nice2 < /proc/stat        # 计算各项差值    Idle=$((idle2 - idle + iowait2 - iowait))    Total=$((user2 - user + nice2 - nice + system2 - system + idle2 - idle + iowait2 - iowait + irq2 - irq + softirq2 - softirq + steal2 - steal))        if [ $Total -eq 0 ]; then echo 0; return; fi    echo $(( (Total - Idle) * 100 / Total )) } # 获取当前正在运行的 stress 进程数 get_stress_count() {    pgrep -x stress | wc -l } # 主循环:动态监控与调节 while true; do    current_usage=$(get_cpu_usage)    stress_count=$(get_stress_count)        # 如果 CPU 低于下限,且当前 stress 进程少于 8 个,则增加 1 个核心负载    if [ "$current_usage" -lt "$TARGET_LOW" ] && [ "$stress_count" -lt 8 ]; then        stress -c 1 > /dev/null 2>&1 &        echo "[$(date '+%H:%M:%S')] CPU: ${current_usage}% | 运行进程: $((stress_count+1))/8 -> 增加负载"            # 如果 CPU 高于上限,且存在 stress 进程,则杀掉 1 个 stress 进程    elif [ "$current_usage" -gt "$TARGET_HIGH" ] && [ "$stress_count" -gt 0 ]; then        # 获取最早启动的一个 stress 进程的 PID 并杀掉        kill -9 $(pgrep -x stress | head -n 1) > /dev/null 2>&1        echo "[$(date '+%H:%M:%S')] CPU: ${current_usage}% | 运行进程: $((stress_count-1))/8 -> 释放负载"    fi        sleep $CHECK_INTERVAL done

2. 赋予权限并后台运行

chmod +x dynamic_stress.sh nohup ./dynamic_stress.sh > stress.log 2>&1 &


3.如何安全停止

pkill -9 -f dynamic_stress.sh pkill -9 stress


如果想保持服务器重启后还能继续运行,那么考虑使用 systemd 托管

1. 创建服务文件:
sudo vi /etc/systemd/system/dynamic-stress.service
2. 写入以下内容(注意修改脚本的实际路径):
[Unit]
Description=Dynamic CPU Stress Test
After=network.target

[Service]
ExecStart=/bin/bash /你的脚本路径/dynamic_stress.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
3. 启动并设置开机自启:
ystemctl daemon-reload
sudo systemctl start dynamic-stress
sudo systemctl enable dynamic-stress


【打印正文】 发布时间:2026-07-22 14:54:56 浏览次数: 作者: 来源:本站原创