最近在测试一个物联网的项目,项目里包含设备资源进行监控告警的功能。例如以下监控项: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