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

我试图简单地运行cat /dev/zero > /dev/null,该方法很好用,但仅使用1个内核:<


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


相关文章Windows上的CPU高负载?


评论

是否可以同时运行cat的多个实例?

@NateKoppenhaver:是的,将它们包装在屏幕会话中似乎可行。但是,如果可能的话,我希望有一个更复杂的解决方案。

嘿,我一直使用cat / dev / random> / dev / null。猜猜/ dev / zero也可以。 :-)

@oKtosiTe cat / dev / random具有消除/ dev / random中的熵的副作用。有时候您需要保存熵,因为我在CPU吞噬过程中没有这个。

@oKtosiTe Rich Homolka所说的是对的,但这不仅是一件坏事,而且它也几乎没有用处,因为它将几乎立即阻塞并停止使用cpu。

#1 楼

试试stress
几乎相当于Windows consume.exe
oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd


评论


在ubuntu上,您可以使用sudo apt-get install Stress安装

–本
13年4月25日在17:50

在debian wheezy上。

–enapupe
13-10-15在1:42

在Fedora上,sudo yum安装压力

–克里斯托弗·马克塔(Christopher Markieta)
2014年11月13日在22:15

拱门:sudo pacman -S Stress

–das_j
15年2月19日在19:44

在OS X上冲泡安装压力

–克里斯蒂安·朗(Christian Long)
15年7月16日在14:15

#2 楼

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

这种单层结构将以100%的速率加载四个核心1:

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


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

如果使用bashksh93和其他支持范围的外壳程序(即不是dash或更旧的ksh),则可以使用以下非便携式语法:

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


如果与4不同,请用要加载的CPU数量替换4。使用以下命令生成负载:超时(默认为60秒)。Control-C也将杀死所有失控循环。此shell函数至少在bashksh下起作用。加载到所有虚拟CPU。在这种情况下,加载行为取决于实现(每个线程可能都报告为100%忙或不忙)。

评论


谢谢,但是&导致命令在单独的线程或单独的内核中运行?我很迷惑。

–mmdemirbas
2012年7月4日在14:23

@mmdemirbas:“&”号使命令作为单独的进程运行。然后,调度程序将所有活动进程调度到所有可用的内核。

– jlliagre
2012年7月5日在1:54



提醒一下,您可以通过发出killall bash来停止此测试-只要确保您当时没有任何其他重要的脚本在运行即可。

–编码员
15年6月29日在19:42

@acoder感谢您提出结束循环的方法。但是,我会避免使用killall bash。已编辑答案,以添加一种更安全的方法来终止负载生成。

– jlliagre
15年6月29日在22:04

+1用于lc shell功能

–山本彰(Akira Yamamoto)
18年6月27日在7:07

#3 楼

我做了一个简单的Python脚本,它执行相同的操作。您可以控制要加载的cpu核心数。这样做的好处是,它除了占用CPU之外不会消耗任何其他资源。 (我认为Mark johnson的想法会消耗很多I / O资源,这在这里是不希望的。)

完成后,您需要杀死脚本。

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



评论


您使用什么程序来显示CPU使用情况?它使我想起了顶层,但我不记得CPU的“图表”。

– jftuga
2012年7月1日在1:13



@jftuga可能是htop,top的漂亮兄弟。

–BoppreH
2012年7月1日,下午3:38

是的。适用于Linux的最佳实时,彩色交互式过程查看器-htop.sourceforge.net

–普什达加德(Pushpak Dagade)
2012年7月2日17:12



没有注意并在Windows框上运行它。非常糟糕的事情...

–德里克
13年2月7日在17:43

#4 楼

一种替代方法是
openssl speed -multi $(grep -ci processor /proc/cpuinfo)


或(如果存在nproc)

openssl speed -multi $(nproc --all)


OpenSSL几乎总是如今在发行版中都可以使用,因此不需要额外的软件包。

#5 楼

为系统中的每个内核启动两个

sha1sum /dev/zero &


命令。

要停止

killall sha1sum




kill sha1sum


#6 楼

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

用法类似于Stress

$ 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


安装

sudo apt-get install stress-ng


评论


请阅读“我如何推荐软件”以获取有关如何推荐软件的一些提示。至少您应该提供的不仅仅是/至少是一个链接,例如有关软件本身的一些附加信息,以及如何使用它来解决问题。

–DavidPostill♦
2015年9月6日于20:33

#7 楼

我通常会选择cpuburn套件:注意:这会在同一时间施加尽可能多的芯片面积,并通过编程产生最大的功耗。我不得不第二次写这篇文章,以某种方式我的机器不喜欢它:-(

还可以按顺序执行cpuburn:

sudo apt-get install cpuburn
for i in {1..4}; do burnK7 & done


当您要停止它们时:

burnP6 & burnP6 & burnP6 & burnP6 & 
[1] 28520
[2] 28521
[3] 28522
[4] 28523

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

#8 楼

您可以根据需要多次运行该命令,并且每次都会占用一个不同的内核:

$ CORES=1
$ for i in `seq 1 $CORES`; do cat /dev/zero > /dev/null &
> done
[1] 8388


评论


难道终止过程会有些麻烦吗?

– oKtosiTe
2012年7月1日在7:26

Killall猫应该这样做。

–克里斯蒂安·曼(Christian Mann)
2012年7月1日21:00

取决于您是否正在运行其他cat进程(我通常这样做)。

– oKtosiTe
2012年7月2日于13:36

#9 楼

https://github.com/GaetanoCarlucci/CPULoadGenerator

相当简单和科学的解决方案。 :



您可以同时在其他内核上运行该进程。

#10 楼

我同时组合了+ jlliagre和+ ecabuk。

#!/bin/bash
lc() {
    nowMs=$(date +%s)
    (
        pids=""
        cpus=${1:-1}
        seconds=${2:-60}
        echo "[$(date)] loading $cpus CPUs for $seconds seconds"
        echo "[$(date)] Expected completion: [$(date --date=@$(expr $nowMs + $seconds))]"
        trap 'for p in $pids; do kill $p; done' 0
        for ((i=0;i<cpus;i++)); do
            sha1sum /dev/zero &
            pids="$pids $!";
        done
        sleep $seconds
    )
    echo "[$(date)] Done"
}

lc $@


#11 楼

pxzxz的并行实现。

pxz -9e /dev/zero --stdout >/dev/null应该可以解决问题,因为它占用大量CPU。 br /> /dev/zero

较新版本的pxz带有pxz -9e /dev/zero --stdout | pxz -9e --stdout >/dev/null选项,可以替代xz

#12 楼

这是我使用的方式,不需要安装任何额外的东西。

例如,从4个进程开始,

上面的选项“ -P”表示的进程数。

#13 楼

您可以使用:

fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd


dd if=/dev/zero of=/dev/null重复用于您的CPU内核。

#14 楼

一个简单的命令行也可以做到这一点:

x="x" ; while : ; do x=$x$x ; echo -n "." ; done


评论


这会更简单:while:;做:;完成

– jlliagre
2012年7月1日在6:30

@jlliagre您将不会超越loadavg 1。

– ott--
2012年7月1日在11:06

您的循环不是主要加载CPU,而是更多地填充了内存。它最终将因内存不足错误而崩溃。

– jlliagre
2012年7月1日在12:31

@jlliagre Mine会填充内存并进行交换(如果存在),因此在终止之前会产生3的负载,因为它耗尽了内存。

– ott--
2012年7月1日14:14

那就是问题所在。您没有回答问的问题,即如何在服务器上产生较高的CPU负载。您的脚本迅速使系统无响应,然后崩溃。有很多更可靠的方法来获得3的负载。例如:对于i in 1 2 3;做一会儿:;做:;完成&;完成

– jlliagre
2012年7月1日14:52

#15 楼

我想将此添加到@jlliagre的评论中,但是我没有足够的声誉。如果要在多个服务器上使用此代码,并且CPU数量会有所不同,则可以使用以下命令:

for ((i=1; i<=`nproc --all`; i++)); do while : ; do : ; done & done


这将利用所有内核在服务器上,无论您有多少。命令nproc是coreutils的一部分,因此应在大多数Linux安装中使用。

#16 楼

运行程序stress,指定您CPU上的所有内核:

stress -c `nproc`


您可以在Debian / Ubuntu上获得它: