如何使用bash命令创建CPU峰值

Use*_*er1 263 linux bash cpu load

我想在Linux机器上创建接近100%的负载.它是四核系统,我希望所有内核全速运行.理想情况下,CPU负载将持续指定的时间,然后停止.我希望在bash中有一些技巧.我在想某种无限循环.

小智 347

我使用压力来做这种事情,你可以告诉它最多有多少个核心...它也可以给内存和磁盘带来压力.

示例为2个核心压力60秒

stress --cpu 2 --timeout 60

  • 在Fedora上,`sudo yum install stress` (6认同)
  • Arch上的"sudo pacman -S stress"或"yaourt -S stress" (6认同)
  • 为了完整性,在基于debian的系统上使用`sudo apt-get install stress`.用于测试[Intel i7 NUC Kit]上的冷却模块(http://www.intel.com/content/www/us/en/nuc/nuc-kit-nuc5i7ryh.html). (5认同)
  • 你需要'EPEL`回购CentOS`wget http:// dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm` (3认同)
  • [`brew`](http://brew.sh/)在OS X上安装压力.由于某些原因,我不得不在四核MBPr上指定8个核心 (3认同)

dim*_*mba 265

你也可以

dd if=/dev/zero of=/dev/null
Run Code Online (Sandbox Code Playgroud)

要运行更多这些以将负载放在更多内核上,请尝试将其分叉:

fulload() { dd if=/dev/zero of=/dev/null | 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
Run Code Online (Sandbox Code Playgroud)

在花括号中重复该命令的次数与要生成的线程数一样多(此处为4个线程).简单的输入命中将停止它(只是确保没有其他dd在这个用户上运行或你也杀了它).

  • 从`/ dev/zero`读取并写入`/ dev/null`不是一个非常好的负载生成器 - 你必须运行很多它们来产生很大的负载.最好做一些像`dd if =/dev/urandom | bzip2 -9 >>/dev/null`.`/ dev/urandom`需要更多努力来生成输出,而`bzip2`将花费大量精力来尝试压缩它,因此整体CPU使用率远高于"用零填充块,然后抛出它"远". (59认同)
  • dd处理I/O的次数多于CPU使用率 (34认同)
  • 使用`jobs -p | xargs kill`只会杀死你创建的进程. (4认同)
  • @twalberg,你应该对你的评论作出回答. (4认同)
  • 这对我的情况实际上是最好的.它也在Cygwin工作.出于某种原因,其他解决方案不会使CPU飙升.添加计数并使四个并行处理工作完美.它在顶部将CPU飙升至100%,然后在没有任何帮助的情况下降至零.只需要四行代码和一个"等待". (2认同)
  • 可以尝试使用“ pbzip2”代替“ bzip2”,它是多线程的,将加载所有内核。 (2认同)

小智 121

我认为这个更简单.打开终端并键入以下内容,然后按Enter键.

yes > /dev/null &
Run Code Online (Sandbox Code Playgroud)

要充分利用现代CPU,一行是不够的,您可能需要重复命令以耗尽所有CPU功率.

为了结束所有这一切,简单地说

killall yes
Run Code Online (Sandbox Code Playgroud)

这个想法最初是在这里找到的,虽然它是为Mac用户设计的,但这也适用于*nix.

  • +1就像魅力一样,谢谢!**值得添加**:此命令将最大化每个CPU核心的一个超线程.所以双核cpu(每个核心有2个线程)每个'yes`命令将获得25%的总负载(假设系统处于空闲状态). (6认同)

L̲̳*_*̲̳̳ 26

一个核心(不调用外部进程):

while true; do true; done
Run Code Online (Sandbox Code Playgroud)

两个核心:

while true; do /bin/true; done
Run Code Online (Sandbox Code Playgroud)

后者只会使我的两个都达到~50%虽然......

这个将使两者都达到100%:

while true; do echo; done
Run Code Online (Sandbox Code Playgroud)

  • 为什么echo使所有cpu核心达到100%? (2认同)

Mit*_*tms 22

虽然我迟到了,这篇文章是谷歌搜索"在Linux中生成负载"的最佳结果之一.

标记为解决方案的结果可用于生成系统负载,我更倾向于使用sha1sum /dev/zero在cpu-core上施加负载.

我们的想法是从无限数据流计算哈希值(例如/ dev/zero,/ dev/urandom,...)这个过程将尝试最大化cpu-core,直到进程中止.要为更多核心生成负载,可以将多个命令连接在一起.

例如.生成2核心负载: sha1sum /dev/zero | sha1sum /dev/zero


Fop*_*tin 18

这是一个程序,你可以在这里下载

在Linux系统上轻松安装

./configure
make
make install
Run Code Online (Sandbox Code Playgroud)

并在一个简单的命令行中启动它

stress -c 40
Run Code Online (Sandbox Code Playgroud)

强调你的所有CPU(无论你有多少)有40个线程,每个线程sqrt对ramdomly生成的数字进行复杂的计算.

您甚至可以定义程序的超时

stress -c 40 -timeout 10s
Run Code Online (Sandbox Code Playgroud)

与使用dd命令的建议解决方案不同,该命令主要处理IO并因此不会因为处理数据而使系统真正过载.

压力程序真的使系统超载,因为处理计算.

  • 对于`stress`命令,上面已经有了答案.正如答案所说,你可以通过yum/apt/etc安装它. (4认同)

Jam*_*ven 15

要加载3个内核5秒钟:

seq 3 | xargs -P0 -n1 timeout 5 yes > /dev/null
Run Code Online (Sandbox Code Playgroud)

这导致许多write()系统调用的高内核(sys)负载.

如果您更喜欢userland cpu load:

seq 3 | xargs -P0 -n1 timeout 5 md5sum /dev/zero
Run Code Online (Sandbox Code Playgroud)

如果您只想继续加载,直到按Ctrl-C:

seq 3 | xargs -P0 -n1 md5sum /dev/zero
Run Code Online (Sandbox Code Playgroud)


Mar*_*ian 11

无限循环是我也有的想法.一个怪异的人是:

while :; do :; done
Run Code Online (Sandbox Code Playgroud)

(与零:相同true,什么都不做,退出零)

您可以在子shell中调用它并在后台运行.这样做$num_cores应该足够了.睡眠所需的时间,你可以把他们都杀掉,你得到的PID jobs -p(提示:xargs)


Jef*_*ein 11

:(){ :|:& };:
Run Code Online (Sandbox Code Playgroud)

这个叉炸弹会对CPU造成严重破坏,并可能导致计算机崩溃.

  • 那一个在"最后指定的时间然后停止"标准失败;) (16认同)
  • 看起来像一堆笑脸. (13认同)
  • 如果我更容易阅读fork_bomb(){fork_bomb |,那将会有所帮助 fork_bomb&}; forkbomb (12认同)
  • 请解释~~~~~ (3认同)
  • @BlueRaja:叉炸弹:http://www.cyberciti.biz/faq/understanding-bash-fork-bomb/ (3认同)
  • 这个叉子炸弹使我的电脑崩溃,我不得不做一个硬电源循环。 (2认同)
  • 来自:http://www.cyberciti.biz/faq/understanding-bash-fork-bomb/ 警告!如果执行这些示例,可能会使您的计算机崩溃。“一旦在系统中成功激活了分叉炸弹,则可能无法在不重新启动系统的情况下恢复正常操作,因为分叉炸弹的唯一解决方案是销毁它的所有实例。” (2认同)

Fre*_*red 10

我会用2个脚本分割东西:

infinite_loop.bash:

#!/bin/bash
while [ 1 ] ; do
    # Force some computation even if it is useless to actually work the CPU
    echo $((13**99)) 1>/dev/null 2>&1
done
Run Code Online (Sandbox Code Playgroud)

cpu_spike.bash:

#!/bin/bash
# Either use environment variables for NUM_CPU and DURATION, or define them here
for i in `seq ${NUM_CPU}` : do
    # Put an infinite loop on each CPU
    infinite_loop.bash &
done

# Wait DURATION seconds then stop the loops and quit
sleep ${DURATION}
killall infinite_loop.bash
Run Code Online (Sandbox Code Playgroud)


44k*_*rma 8

增加负载或消耗 CPU 100% 或 X%

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

在某些系统上,这会增加 X% 插槽中的负载,在这种情况下,您必须多次运行相同的命令。

然后您可以通过键入命令查看 CPU 使用情况

top
Run Code Online (Sandbox Code Playgroud)

释放负载

killall sha1sum
Run Code Online (Sandbox Code Playgroud)


Pau*_*ce. 5

#!/bin/bash
duration=120    # seconds
instances=4     # cpus
endtime=$(($(date +%s) + $duration))
for ((i=0; i<instances; i++))
do
    while (($(date +%s) < $endtime)); do :; done &
done
Run Code Online (Sandbox Code Playgroud)


Tom*_*s M 5

如果您不想安装额外的软件,您可以使用自动利用所有 CPU 核心的压缩实用程序。例如,xz:

 cat /dev/zero | xz -T0 > /dev/null
Run Code Online (Sandbox Code Playgroud)

这会从 /dev/zero 获取无限的虚拟数据流,并使用系统中可用的所有内核对其进行压缩。