Linux 中模擬多種系統負載的方法

Wi1dcard發表於2019-01-23

近期在研究系統監控預警,包括但不限於:CPU 使用率預警、記憶體使用率預警、磁碟使用率預警以及 IO 預警。

在測試過程中,需要模擬系統負載來驗證預警規則是否有效。故總結幾種模擬負載的方式,以供日後查詢。

CPU 使用率

方法很多,最簡單直接的有:

  • cat /dev/zero > /dev/null
  • cat /dev/urandom | gzip -9 > /dev/null
  • dd if=/dev/zero of=/dev/null
  • yes > /dev/null
  • ...

以上方法僅能對單核施加壓力,多核心可以使用 for 迴圈 + 命令結尾 &,或使用多個管道連線來實現:

  • for i in 'seq 1 $(cat /proc/cpuinfo | grep "physical id" | wc -l)'; do cat /dev/zero > /dev/null & done
  • cat /dev/urandom | gzip -9 | gzip -d | gzip -9 | gzip -d > /dev/null

磁碟使用率

上節我們使用到了 dd 命令,該命令結合 /dev/zero 也可以被用於輸出一定大小的檔案,從而模擬磁碟使用率。

例如:

dd if=/dev/zero of=loadfile bs=1M count=1024 # 輸出 1024M 的 \0 到 loadfile

磁碟 IO

利用剛剛生成的 loadfile,加上 cp 命令可以一定程度地模擬順序 IO:

while true; do cp loadfile loadfile1; done # 無限迴圈複製檔案

記憶體使用率

回看前面的幾項需求,其實都可以透過 stress 工具和 lookbusy 工具實現,並且更加精準、可控、易用。

以下分別列出幾個例子,方便照抄(2333)。

stress --cpu 2 # 產生 2 個工作程式對 CPU 施加壓力,也就是將會佔用兩個 CPU 核心
stress --vm 1 --vm-bytes 128M --vm-hang 0 # 產生 1 個工作程式,佔用 128MB 記憶體並保持
stress --io 1 # 產生 1 個工作程式對 IO 施加壓力
lookbusy -c 50 # 佔用所有 CPU 核心各 50%
lookbusy -c 50 -n 2 # 佔用兩個 CPU 核心各 50%
lookbusy -c 50-80 -r curve # 佔用所有 CPU 核心在 50%-80% 左右浮動

lookbusy -c 0 -m 128MB -M 1000 # 每 1000 毫秒,迴圈釋放並分配 128MB 記憶體
lookbusy -c 0 -d 1GB -b 1MB -D 10 # 每 10 毫秒,迴圈進行 1MB 磁碟寫入,臨時檔案不超過 1GB

以上命令的引數均可結合使用,同時對系統多個維度施加壓力。

其它工具

參考

擴充

計算 IO 佔用率(百分比)的方法:https://unix.stackexchange.com/questions/3...

本作品採用《CC 協議》,轉載必須註明作者和本文連結
Former WinForm and PHP engineer. Now prefer Golang and Rust, and mainly working on DevSecOps and Kubernetes.

相關文章