如何把linux cpu占满

使用 stress –cpu $(nproc) 或 yes > /dev/null & 命令可占满Linux CPU

以下是将Linux系统CPU资源占满的详细方法汇总,包含多种实现方式、参数说明及适用场景分析,以下操作可能对系统响应造成影响,建议在测试环境执行,并做好中断准备(如使用Ctrl+Ckill命令)。

常用CPU占满方法及指令

工具/命令 核心功能 占满CPU原理 典型指令 适用场景
stress 压力测试 模拟多进程计算任务 stress --cpu $(nproc) -t 600 多核全占满,支持定时
yes 无限输出 持续写入操作耗尽资源 yes > /dev/null & 轻量级单线程占用
DD 磁盘读写 结合/dev/zero生成计算负载 dd if=/dev/zero of=/dev/null CPU与IO双重压力
自定义脚本 灵活控制 死循环计算任务 while :; do a=$((a^b)); done 无需安装额外工具

使用stress工具(推荐)

安装方式

# Debian/Ubuntu系
sudo apt-get install stress
# RedHa/CentOS系
sudo yum install stress

基础指令

stress --cpu $(nproc) --timeout 600
  • --cpu $(nproc):占用全部CPU核心(nproc返回逻辑核心数)
  • --timeout 600:持续600秒(10分钟)
  • 扩展参数
    • --hdd X:额外模拟XGB的磁盘IO负载
    • --vm Y:分配Y%的内存压力
    • --vm-bytes ZM:使用ZMB内存空间

优势:支持精细化控制,可组合多种压力测试(CPU、内存、IO等),适合性能测试与故障复现。

yes命令快速占满

yes > /dev/null &
  • yes默认每秒输出一次”y”,重定向至黑洞设备/dev/null
  • 多线程优化
    for i in {1..$(nproc)}; do yes > /dev/null & done

    通过启动N个并行进程(N=CPU核心数),可实现多核100%占用。

注意:单个yes进程可能仅占用约30%-50%单核资源,需多进程叠加。

DD命令极限压榨

dd if=/dev/zero of=/dev/null
  • if=/dev/zero:生成无限零流
  • of=/dev/null:丢弃输出数据
  • 增强版
    dd if=/dev/zero of=/dev/null bs=1M count=10000

    设置1MB块大小与超大循环次数,可触发更高频率的读写计算。

特性:同时产生CPU与磁盘IO负载,适合存储性能与CPU协同测试。

自定义Shell脚本

#!/bin/bash
while :; do
  a=$((a^b)) # 无意义计算
  b=$((c+d))
done
  • 保存为cpu_load.sh,赋予执行权限后运行(./cpu_load.sh &
  • 优化方案
    for i in {1..$(nproc)}; do
      ./cpu_load.sh &
    done

    横向铺满所有逻辑核心。

优点:无需依赖外部工具,适用于最小化环境(如容器内)。

进阶技巧与控制

  1. 多核分配策略
    通过taskset绑定进程到指定CPU:

    taskset -c 0,1 stress --cpu 2

    上述命令将stress进程限制在物理核心0和1上运行,适用于多插槽服务器的压力测试。

  2. 动态调整负载
    使用cpulimit实时调控:

    cpulimit -l 80 -p $(pgrep stress)

    将PID为stress的进程CPU使用率限制为80%,适合模拟梯度负载。

  3. 持久化后台运行
    配合nohup实现断线续传:

    nohup stress --cpu $(nproc) > stress.log 2>&1 &

    日志记录在stress.log,避免终端断开导致进程终止。

安全与监控建议

  1. 紧急终止

    • 单个进程:kill -9 PID
    • 全部清除:pkill -9 stress yes dd
  2. 实时监控工具
    | 工具 | 功能 | 命令示例 |
    |——|——|———-|
    | top/htop | 实时进程视图 | htop |
    | mpstat | CPU细分统计 | mpstat -P ALL 1 |
    | sar | 历史负载记录 | sar -u 1 5 |
    | dstat | 综合资源监控 | dstat --cpu --disk --io --memory |

  3. 防护性配置

    • 设置timeout自动终止:
      timeout 300 ./cpu_load.sh
    • 使用nice降低优先级:
      nice -n 19 stress --cpu $(nproc)

FAQs

Q1: 如何验证CPU是否已被完全占满?
A1: 使用mpstathtop观察%usr%sys字段是否接近100%。

mpstat -P ALL 1

若所有CPU核心的%usr(用户态)和%sys(内核态)之和接近100%,则表示已满载。

Q2: 哪种方法最适合长时间稳定性测试?
A2: 推荐使用stress工具配合--timeout参数,原因如下:

  • 支持多维度压力模拟(CPU、内存、IO等)
  • 可设置超时自动退出,避免意外挂起
  • 日志易读性强,便于后续分析
    典型命令:

    stress --cpu 4 --io 2 --vm 2 --vm-bytes 512M --timeout 3600

    该指令将模拟4核CPU满载、2个磁盘IO线程、512MB内存分配

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/69482.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月19日 17:55
下一篇 2025年7月19日 17:58

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN