最近在測試一個物聯網的項目,項目裏包含設備資源進行監控告警的功能。例如以下監控項:cpu負載超核、內存使用率太高、硬盤使用率太高,系統流量超速等。爲了驗證監控的有效性,就須要構造對應場景來進行測試。linux
如何對cpu,內存,硬盤,流量這幾類資源進行數據構造呢?git
我在網速蒐羅了一圈發現有四個比較好用的工具,能較方便的構造對應場景:github
cpuburnwindows
memtesterapp
ddide
netperf工具
首先咱們來介紹這款燒腦神器,cpuburn測試
項目地址:https://patrickmn.com/projects/cpuburn/ui
一句話介紹:cpuburn lets you utilize 100% of all available cores from the command line — useful when stress-testing(cpuburn 可以讓你用一行命令來打滿全部CPU的可用核,在作壓力測試的時候特別奏效)spa
cpuburn主要是針對windows和linux系統。
有三種安裝方式
二進制運行
源碼編譯安裝
yum或者apt安裝
Linux:
1)32位:cpuburn-1.0-i386.tar.gz
2)64位:cpuburn-1.0-amd64.tar.gz
1)根據系統位數下載上述文件(以64位爲例)
wget https://cdn.pmylund.com/files/tools/cpuburn/linux/cpuburn-1.0-amd64.tar.gz
2)解壓縮,解壓完以後便可獲得cpuburn二進制
tar xzvf cpuburn-1.0-amd64.tar.gz
3) 拷貝cpuburn到/usr/bin
cp cpuburn /usr/bin/
Windows: cpuburn-1.0.zip
1)點擊下載後解壓縮到當前目錄
2)添加到Path環境變量中(可選)
運行如圖
這種方式適合官方沒有對應系統包的狀況,好比mac
1)安裝go環境(若是已經安裝,請忽略)
參考:go環境搭建
2)下載源碼
git clone https://github.com/patrickmn/cpuburn
3) 編譯源碼
執行完以下命令後會在當前目錄生成cpuburn二進制文件
go build cpuburn.go
Centos: yum install -y cpuburn Ubuntu: apt-get install -y cpuburn
輸入:cpuburn -h
Usage of ./cpuburn:
-n int
number of cores to burn (0 = all) //指定進行壓測的CPU核數,默認爲0(有幾核壓幾核)
-u int
seconds between updates (0 = don't update) (default 10) //打印運行時長的間隔,默認10秒中打印一次運行時間(0表明靜默模式,不打印任何信息)
1. 壓測全部CPU核(當前CPU有8核),每隔10秒更新一次運行時間。
cpuburn
2.壓測CPU核數爲4,每隔10秒更新一次運行時間。
cpuburn -n=4
查看效果:
輸入:top,而後按最上面的數字1,能夠看到4核幾乎被所有榨滿了。
3.靜默模式運行cpuburn
cpuburn -u=0
cpuburn是go寫的一個小工具,很是的輕巧,讓咱們簡單拜讀一下。
package main import ( "flag" "fmt" "runtime" "time" ) var ( numBurn int updateInterval int ) func cpuBurn() { //這裏是核心,每一個go協程不斷的讓出CPU時間片 for { for i := 0; i < 2147483647; i++ { } runtime.Gosched() } } func init() { //初始化變量 fmt.Printf("Your System is %s,and CPUs/cores number is %d\n",runtime.GOOS, runtime.NumCPU); //這裏是我加的一個打印信息 flag.IntVar(&numBurn, "n", 0, "number of cores to burn (0 = all)") flag.IntVar(&updateInterval, "u", 10, "seconds between updates (0 = don't update)") flag.Parse() if numBurn <= 0 { numBurn = runtime.NumCPU() } } func main() { runtime.GOMAXPROCS(numBurn) //設定使用的cpu核數,不設定默認使用1核運行全部協程 fmt.Printf("Burning %d CPUs/cores\n", numBurn) for i := 0; i < numBurn; i++ { //根據指定的cpu核數建立go攜程 go cpuBurn() } if updateInterval > 0 { //若是設定了更新時間,則不斷每間隔updateInterval*60秒打印更新時間 t := time.Tick(time.Duration(updateInterval) * time.Second) //設定定時器時間間隔 for secs := updateInterval; ; secs += updateInterval { //間隔幾秒打印一下當前運行的總時間 <-t fmt.Printf("%d seconds\n", secs) } } else { //若是沒有設定更新時間,則一直阻塞住。 select {} // wait forever } }
從新編譯cpuburn.go,執行下看看效果:
博主:測試生財
座右銘:專一測試與自動化,致力提升研發效能;經過測試精進完成原始積累,經過讀書理財奔向財務自由。
csdn:https://blog.csdn.net/ccgshigao