cpu压测神器:cpuburn深度指南

1. 前言

最近在测试一个物联网的项目,项目里包含设备资源进行监控告警的功能。例如以下监控项:cpu负载超核、内存使用率太高、硬盘使用率太高,系统流量超速等。为了验证监控的有效性,就须要构造对应场景来进行测试。linux

如何对cpu,内存,硬盘,流量这几类资源进行数据构造呢?git

我在网速搜罗了一圈发现有四个比较好用的工具,能较方便的构造对应场景:github

  • cpuburnwindows

  • memtesterapp

  • ddide

  • netperf工具

首先咱们来介绍这款烧脑神器,cpuburn测试

 

2.简介

项目地址: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

 

3.安装方式

cpuburn主要是针对windows和linux系统。

有三种安装方式

  1. 二进制运行

  2. 源码编译安装

  3. yum或者apt安装

 

3.1 二进制安装

3.1.1 Linux版下载地址

Linux:

1)32位:cpuburn-1.0-i386.tar.gz

2)64位:cpuburn-1.0-amd64.tar.gz

3.1.2 Linux下安装

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/

3.1.3 Windows版下载地址

Windows: cpuburn-1.0.zip

3.1.3 Windows下安装

1)点击下载后解压缩到当前目录

2)添加到Path环境变量中(可选)

运行如图

3.2 源码编译安装

这种方式适合官方没有对应系统包的状况,好比mac

1)安装go环境(若是已经安装,请忽略)

参考:go环境搭建

2)下载源码

git clone https://github.com/patrickmn/cpuburn

3) 编译源码

执行完以下命令后会在当前目录生成cpuburn二进制文件

go build cpuburn.go

3.3 使用yum或者apt安装

Centos:
yum install -y cpuburn
Ubuntu:
apt-get install -y cpuburn

4. 帮助

输入: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表明静默模式,不打印任何信息)

5. 例子

1. 压测全部CPU核(当前CPU有8核),每隔10秒更新一次运行时间。

cpuburn

2.压测CPU核数为4,每隔10秒更新一次运行时间。

cpuburn -n=4

查看效果:

输入:top,而后按最上面的数字1,能够看到4核几乎被所有榨满了。

3.静默模式运行cpuburn

cpuburn -u=0

6.源码解析

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

博客园:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374

相关文章
相关标签/搜索