我目前正在调试 Cacti 安装并想创建 CPU 负载来调试我的 CPU 利用率图表。
我尝试简单地运行cat /dev/zero > /dev/null
,效果很好,但仅使用 1 个核心:
有没有更好的方法来测试/最大化负载下的系统资源?
答案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%。
如果你使用bash
,ksh93
以及其他支持范围的 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