如何在 Linux 服务器上产生高 CPU 负载?

如何在 Linux 服务器上产生高 CPU 负载?

我目前正在调试 Cacti 安装并想创建 CPU 负载来调试我的 CPU 利用率图表。

我尝试简单地运行cat /dev/zero > /dev/null,效果很好,但仅使用 1 个核心:

在此处输入图片描述

有没有更好的方法来测试/最大化负载下的系统资源?

有关的:如何在 Windows 上产生高 CPU 负载?

答案1

尝试stress 它几乎相当于 Windows consume.exe

oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd

答案2

不需要安装任何额外的包,您的旧 shell 可以独自完成此操作。

这一行代码将以100%加载你的四个核心1 :

for i in 1 2 3 4; do while : ; do : ; done & done

它的工作原理很简单,它启动四个无限循环。每个循环都在重复空指令(:)。每个循环都可以将 CPU 核心加载到 100%。

如果你使用bashksh93以及其他支持范围的 shell(即不支持dash或更旧的ksh),那么你可以使用这种不可移植的语法:

for i in {1..4}; do ...

如果与 不同,请将其替换4为您想要加载的 CPU 数量4

假设当您启动其中一个循环时没有正在运行的后台作业,则可以使用以下命令停止负载生成:

for i in 1 2 3 4; do kill %$i; done

回答@underscore_d 的评论,这里有一个增强版本,它大大简化了停止加载的过程,还允许指定超时(默认为 60 秒)。A Control-C也会终止所有失控循环。此 shell 函数至少在 和 下bash有效ksh

# Usage: lc [number_of_cpus_to_load [number_of_seconds] ]
lc() {
  (
    pids=""
    cpus=${1:-1}
    seconds=${2:-60}
    echo loading $cpus CPUs for $seconds seconds
    trap 'for p in $pids; do kill $p; done' 0
    for ((i=0;i<cpus;i++)); do while : ; do : ; done & pids="$pids $!"; done
    sleep $seconds
  )
}

1请注意,如果 CPU 支持每核多个线程(超线程),则操作系统会将负载分派到所有虚拟 CPU。在这种情况下,负载行为取决于实现(每个线程可能会报告为 100% 繁忙或不繁忙)

答案3

另一种方法是

openssl speed -multi $(grep -ci processor /proc/cpuinfo)

或(如果存在 nproc)

openssl speed -multi $(nproc --all)

OpenSSL 几乎总是存在于现在的发行版中,因此不需要额外的软件包。

答案4

开始二

sha1sum /dev/zero &

针对系统中每个核心的命令。

停止

killall sha1sum

或者

kill sha1sum

相关内容