• cpu压测神器:cpuburn深度指南


    1. 前言

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

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

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

    • cpuburn
    • memtester
    • dd
    • netperf

    首先我们来介绍这款烧脑神器,cpuburn

    2.简介

    项目地址:https://patrickmn.com/projects/cpuburn/

    一句话介绍:cpuburn lets you utilize 100% of all available cores from the command line — useful when stress-testing(cpuburn 能够让你用一行命令来打满所有CPU的可用核,在做压力测试的时候特别奏效)

    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
    ",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
    ", 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
    ", secs)
                    }
            } else { //如果没有设定更新时间,则一直阻塞住。
                    select {} // wait forever
            }
    }

    重新编译cpuburn.go,执行下看看效果:

    博主:测试生财(一个不为996而996的测开码农)

    座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。

    内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。

    csdn:https://blog.csdn.net/ccgshigao

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

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

    微信公众号:测试生财(定期分享独家内容和资源)

  • 相关阅读:
    bzoj4028 [HEOI2015]公约数数列
    bzoj4766 文艺计算姬
    bzoj4241 历史研究
    bzoj3744 Gty的妹子序列
    bzoj4540 [Hnoi2016]序列
    uoj#228 基础数据结构练习题
    bzoj2467 [中山市选2010]生成树
    bzoj2125 最短路
    bzoj4800 [Ceoi2015]Ice Hockey World Championship
    bzoj2463 [中山市选2009]谁能赢呢?
  • 原文地址:https://www.cnblogs.com/qa-freeroad/p/13649589.html
Copyright © 2020-2023  润新知