当前位置: 首页 > news >正文

Linux占用CPU脚本

完整的CPU占用控制脚本

#!/bin/bash # cpu_controller.sh - CPU占用控制脚本 SCRIPT_NAME="cpu_stress_worker" PID_FILE="/tmp/cpu_stress.pid" LOG_FILE="/tmp/cpu_stress.log" # 默认配置 DEFAULT_CORES=$(nproc) DEFAULT_USAGE=50 # CPU占用工作函数 cpu_worker() { local usage=$1 local busy_time=$((usage * 10000)) local idle_time=$(((100 - usage) * 10000)) while true; do # 忙循环 end=$(( $(date +%s%N) + busy_time * 1000 )) while [ $(date +%s%N) -lt $end ]; do : done # 空闲 sleep $(echo "scale=6; $idle_time / 1000000" | bc 2>/dev/null || echo "0.5") done } # 启动CPU占用 start_stress() { local cores=${1:-$DEFAULT_CORES} local usage=${2:-$DEFAULT_USAGE} # 检查是否已经在运行 if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then echo "CPU占用已在运行中,请先停止" return 1 fi echo "启动CPU占用: ${cores}核心, ${usage}%占用率" # 启动多个工作进程 > "$PID_FILE" for ((i=0; i<cores; i++)); do cpu_worker $usage & echo $! >> "$PID_FILE" done echo "已启动,PID文件: $PID_FILE" echo "使用 '$0 stop' 停止" echo "使用 '$0 status' 查看状态" } # 停止CPU占用 stop_stress() { if [ ! -f "$PID_FILE" ]; then echo "没有找到运行中的CPU占用进程" return 1 fi echo "停止CPU占用..." while read pid; do kill $pid 2>/dev/null && echo "已停止进程 $pid" done < "$PID_FILE" rm -f "$PID_FILE" echo "所有进程已停止" } # 查看状态 status_stress() { if [ -f "$PID_FILE" ] && [ -s "$PID_FILE" ]; then local running=0 while read pid; do if kill -0 $pid 2>/dev/null; then ((running++)) fi done < "$PID_FILE" if [ $running -gt 0 ]; then echo "CPU占用运行中: $running 个进程" echo "当前CPU使用率:" top -bn1 | grep "Cpu(s)" | head -1 else echo "CPU占用未运行" rm -f "$PID_FILE" fi else echo "CPU占用未运行" fi } # 调整CPU占用率 adjust_usage() { local new_usage=$1 if [ ! -f "$PID_FILE" ] || [ ! -s "$PID_FILE" ]; then echo "没有运行中的CPU占用进程" return 1 fi # 获取当前核心数 local cores=0 while read pid; do if kill -0 $pid 2>/dev/null; then ((cores++)) fi done < "$PID_FILE" echo "调整CPU占用率到 ${new_usage}%,核心数: $cores" # 停止旧进程 stop_stress # 启动新进程 start_stress $cores $new_usage } # 主函数 case "${1:-}" in start) start_stress "${2:-$DEFAULT_CORES}" "${3:-$DEFAULT_USAGE}" ;; stop) stop_stress ;; restart) stop_stress sleep 1 start_stress "${2:-$DEFAULT_CORES}" "${3:-$DEFAULT_USAGE}" ;; status) status_stress ;; adjust) if [ -z "$2" ]; then echo "用法: $0 adjust <占用率1-100>" exit 1 fi adjust_usage "$2" ;; *) echo "用法: $0 {start|stop|restart|status|adjust}" echo "" echo "命令:" echo " start [核心数] [占用率] - 启动CPU占用" echo " stop - 停止CPU占用" echo " restart [核心数] [占用率] - 重启CPU占用" echo " status - 查看状态" echo " adjust <占用率> - 调整CPU占用率" echo "" echo "示例:" echo " $0 start - 使用默认配置启动" echo " $0 start 2 80 - 2个核心,80%占用率" echo " $0 adjust 30 - 调整占用率为30%" echo " $0 stop - 停止" exit 1 ;; esac

使用方法

  1. 保存并设置权限:
    # 保存脚本 vim cpu_controller.sh # 添加执行权限 chmod +x cpu_controller.sh
  2. 基本操作:
    # 启动(默认所有核心,50%占用率) ./cpu_controller.sh start # 启动指定核心数和占用率 ./cpu_controller.sh start 2 80 # 2个核心,80%占用率 ./cpu_controller.sh start 4 30 # 4个核心,30%占用率 # 查看状态 ./cpu_controller.sh status # 动态调整占用率(无需重启) ./cpu_controller.sh adjust 90 # 调整为90% ./cpu_controller.sh adjust 10 # 调整为10% # 停止 ./cpu_controller.sh stop # 重启 ./cpu_controller.sh restart 2 60
  3. 后台运行示例:
    # 后台启动 nohup ./cpu_controller.sh start 2 70 & # 查看日志 tail -f /tmp/cpu_stress.log # 停止后台进程 ./cpu_controller.sh stop

    备注:启动的时候报错bash: ./cpu_controller.sh:/bin/bash^M:解释器错误: 没有那个文件或目录 ;

    # 1. 先转换文件格式 sed -i 's/\r$//' cpu_controller.sh # 2. 添加执行权限 chmod +x cpu_controller.sh # 3. 验证文件格式(应该看不到^M) cat -A cpu_controller.sh | head -1 # 4. 运行脚本 ./cpu_controller.sh start
http://www.jsqmd.com/news/1068875/

相关文章:

  • 别再用传统SOA审计AI系统!奇点大会权威发布《AI原生审计成熟度模型》——仅开放前500份评估工具包
  • AI原生预训练模型选型避坑手册(SITS 2026实测版):5个被厂商隐瞒的关键衰减指标曝光
  • 别再堆模型了!SITS 2026定义的“最小可行融合单元”是什么?——1个架构图+4个验证checklist
  • (毕业必看)亲测好用的一键生成论文工具,毕业党收藏备用
  • Hermes Agent 技能进化系统拆解:Skill 的元数据结构、自注册加载与退化机制 [07]
  • 2026年腾讯地图LBS:社交地产出行AR三维地图技术方案
  • 工程企业怎么进行数字化管理,都有哪些工程项目管理系统?
  • 为什么92%的LLM部署在2026年将因XAI不达标被拒入金融/医疗场景?——奇点大会首曝监管沙盒准入白皮书
  • 为什么你的MoCo在SITS 2026测试集上AUC暴跌?20年CV老兵拆解:时序负样本采样偏差的3层因果链与实时校准工具包
  • 六张网基建全面落地:十万亿级地下管网赛道,谁能抓住核心红利?
  • 2026串口屏行业观察
  • Mac 连接火山引擎 ECS:SSH 密钥配置与文件互传完整教程
  • 【紧急预警】SITS 2026将于Q3强制启用新注意力校验协议:3类旧版可视化脚本将在2026.09.30自动失效
  • 从本地到云端,ROCm 7.x 环境迁移的差异化配置要点
  • 使用Gemini显示“出了点问题”又或者“Somethingwent wrong”出错?
  • 2026思明区培育钻怎么挑?内行人的避坑指南
  • 软件许可证总是不够用,问题到底出在哪
  • 2026 年 6 月密封圈定制亲测分享
  • 运维转大模型:工程实践里的常见坑
  • # 传统土建危废间难适配数字化监管,越华环保集团智能存储方案能补齐技术短板吗?
  • 【AI原生模型审计黄金标准】:2026奇点大会首次公开的7步闭环审计流程(含GDPR/ISO/MLSec合规映射表)
  • LeetCode 每日一题笔记 日期:2026.06.19 题目:1840. 最高建筑高度
  • 上门按摩平台的护城河,到底在哪里?
  • 2026年在惠州寻找靠谱的产品故事片影视制作服务商哪家更靠谱
  • FasiumAI 服装设计实战:从参考图到三视图与 AI 生成 Tech Pack 的完整流程
  • ASR与NLP:人工智能语言处理的双翼
  • 大模型调试不再靠猜(SITS 2026注意力异常检测引擎内测版限时开放,仅剩最后112个企业席位)
  • 一次内部转发引发的泄密复盘:边界防护为何挡不住文件失控
  • 软文发稿平台怎么选?从资源、优化、售后看懂平台差距
  • Litefuse 开源发布:一行命令部署 Agent 可观测与评估平台,单机版比 Langfuse 快 5.5 倍