如何在 Linux 伺服器上產生高 CPU 負載?

如何在 Linux 伺服器上產生高 CPU 負載?

我目前正在處理調試 Cacti 安裝並想要建立 CPU 負載來調試我的 CPU 使用率圖表。

我嘗試簡單地運行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

答案2

無需安裝任何額外的軟體包,您的舊 shell 就可以單獨完成此操作。

這一行將以100%加載您的四個核心1 :

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

它的工作原理非常簡單,它啟動四個無限循環。他們每個人都在重複空指令(:)。每個循環都能以 100% 載入 CPU 核心。

如果您使用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 秒ControlC。這個 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

相關內容