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

Der*_*ler 223 debian performance benchmarking

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

我试图简单地运行cat /dev/zero > /dev/null,它运行良好,但只使用了 1 个核心:

在此处输入图片说明

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

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

小智 255

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

oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
Run Code Online (Sandbox Code Playgroud)

  • 在 ubuntu 上,您可以使用 `sudo apt-get install stress` 进行安装 (31认同)
  • Arch:`sudo pacman -S 压力` (16认同)
  • 在 debian wheezy 上也是如此。 (15认同)
  • 在 Fedora 上,`sudo yum install stress` (12认同)
  • OS X 上的“brew install stress” (9认同)
  • 在 Amazon Linux 上,`sudo amazon-linux-extras install epel -y && sudo yum install stress -y` ([ref](https://gist.github.com/mikepfeiffer/d27f5c478bef92e8aff4241154b77e54)) (2认同)

jll*_*gre 127

无需安装任何额外的软件包,您的旧外壳可以单独完成。

这个单线程将100%加载您的四个核心1

for i in 1 2 3 4; do while : ; do : ; done & done
Run Code Online (Sandbox Code Playgroud)

它的工作原理非常简单,它启动了四个无限循环。他们每个人都在重复空指令 ( :)。每个循环都能够以 100% 的速度加载 CPU 内核。

如果您使用bash,ksh93和其他支持范围的 shell(即 notdash或 old ksh),您可以使用这种不可移植的语法:

for i in {1..4}; do ...
Run Code Online (Sandbox Code Playgroud)

替换4与CPU的数量,你想,如果加载不同4

假设您在启动这些循环之一时没有后台作业已经在运行,您可以使用该命令停止负载生成:

for i in 1 2 3 4; do kill %$i; done
Run Code Online (Sandbox Code Playgroud)

回答@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
  )
}
Run Code Online (Sandbox Code Playgroud)

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

  • @mmdemirbas:与号使命令作为单独的进程运行。然后调度程序将所有活动进程分派给所有可用的内核。 (4认同)
  • 提醒一下,您可以通过发出“killall bash”来停止此测试 - 只需确保当时没有任何其他重要脚本正在运行。 (2认同)
  • +1 用于 lc shell 函数 (2认同)

rko*_*egi 27

一种替代方法是

openssl speed -multi $(grep -ci processor /proc/cpuinfo)
Run Code Online (Sandbox Code Playgroud)

或(如果存在 nproc)

openssl speed -multi $(nproc --all)
Run Code Online (Sandbox Code Playgroud)

OpenSSL 几乎总是出现在现在的发行版中,所以不需要额外的包。

  • 恕我直言,这应该是公认的答案,因为它不需要任何额外的软件包并且它可以处理所有核心。 (2认同)

Pus*_*ade 24

我制作了一个简单的 python 脚本,它的作用相同。您可以控制要加载的 CPU 内核数。这样做的好处是它不会消耗除 cpu 之外的任何其他资源。(我认为 Mark johnson 的想法会消耗大量 I/O 资源,这在这里是不受欢迎的。)

from multiprocessing import Pool

def f(x):
    # Put any cpu (only) consuming operation here. I have given 1 below -
    while True:
        x * x

# decide how many cpus you need to load with.
no_of_cpu_to_be_consumed = 3

p = Pool(processes=no_of_cpu_to_be_consumed)
p.map(f, range(no_of_cpu_to_be_consumed))
Run Code Online (Sandbox Code Playgroud)

只需从终端运行此脚本$ python temp1.py。完成后,您需要终止脚本。

这是我加载 3 个内核时的 CPU 消耗输出。

脚本 temp1.py 创建了三个进程(PID - 9377、9378、9379),它们加载了我的 3 个内核

  • @jftuga 可能是 _htop_,_top_ 的漂亮弟弟。 (13认同)
  • 你用什么程序来显示这样的CPU使用率?它让我想起了 top,但我不记得 CPU '图表'。 (3认同)
  • 没有注意并在 Windows 机器上运行它。很糟糕的事情... (3认同)
  • 是的,它的 htop。最好的实时、多彩的 linux 交互式进程查看器 - http://htop.sourceforge.net/ (2认同)

小智 13

开始二

sha1sum /dev/zero &
Run Code Online (Sandbox Code Playgroud)

系统中每个核心的命令。

停止

killall sha1sum
Run Code Online (Sandbox Code Playgroud)

或者

kill sha1sum
Run Code Online (Sandbox Code Playgroud)


小智 9

我一直在开发压力 ng,这是一种更新的压力工具,可以对 Linux 系统的各个方面施加压力。有关更多信息,请参阅http://kernel.ubuntu.com/~cking/stress-ng/

用法类似于压力

$ stress-ng --cpu 4 --vm 2 --fork 8 --switch 4 --timeout 1m
stress-ng: info:  [32254] dispatching hogs: 4 cpu, 8 fork, 4 switch, 2 vm
stress-ng: info:  [32254] cache allocate: default cache size: 8192K
Run Code Online (Sandbox Code Playgroud)

安装

sudo apt-get install stress-ng
Run Code Online (Sandbox Code Playgroud)

  • 请阅读 [我如何推荐软件](https://meta.superuser.com/questions/5329/how-do-i-recommend-software-in-my-answers/5330#5330) 以获取有关如何推荐的一些提示你应该去推荐软件。至少您应该提供的不仅仅是/至少是一个链接,例如关于软件本身的一些附加信息,以及如何使用它来解决问题中的问题。 (7认同)

ce4*_*ce4 7

我一般走cpuburn套件:

sudo apt-get install cpuburn
for i in {1..4}; do burnK7 & done
Run Code Online (Sandbox Code Playgroud)

将 4 替换为您拥有或想要强调的核心数/HT 线程数。

注意:这会同时强调尽可能多的芯片面积,它被编程为产生最大的功耗。我不得不第二次写这篇文章,不知何故我的机器不喜欢它:-(

您也可以按顺序执行 cpuburn:

burnP6 & burnP6 & burnP6 & burnP6 & 
[1] 28520
[2] 28521
[3] 28522
[4] 28523
Run Code Online (Sandbox Code Playgroud)

当你想阻止他们时:

killall burnP6
Run Code Online (Sandbox Code Playgroud)

您还可以乘以burnP6 &匹配系统上 CPU 内核的数量。