我试图简单地运行
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
评论
在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内核。 如果使用
bash
,ksh93
和其他支持范围的外壳程序(即不是dash
或更旧的ksh
),则可以使用以下非便携式语法:for i in {1..4}; do ...
如果与
4
不同,请用要加载的CPU数量替换4
。使用以下命令生成负载:超时(默认为60秒)。Control-C也将杀死所有失控循环。此shell函数至少在bash
和ksh
下起作用。加载到所有虚拟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 楼
pxz
是xz
的并行实现。 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上获得它:
评论
是否可以同时运行cat的多个实例?@NateKoppenhaver:是的,将它们包装在屏幕会话中似乎可行。但是,如果可能的话,我希望有一个更复杂的解决方案。
嘿,我一直使用cat / dev / random> / dev / null。猜猜/ dev / zero也可以。 :-)
@oKtosiTe cat / dev / random具有消除/ dev / random中的熵的副作用。有时候您需要保存熵,因为我在CPU吞噬过程中没有这个。
@oKtosiTe Rich Homolka所说的是对的,但这不仅是一件坏事,而且它也几乎没有用处,因为它将几乎立即阻塞并停止使用cpu。