cpu压测神器:cpuburn深度指南_cpuburner-程序员宅基地

技术标签: cpuburn  性能测试  linux  运维&环境  go  linux大全  

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\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,执行下看看效果:

 

传送门:2021最新测试资料与大厂招聘合集

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

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

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

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

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

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ccgshigao/article/details/108526470

智能推荐

【Python】xarray交换维度、更改变量内部的维度位置教程_xarray transpose-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏6次。这样变量内部维度排布由原来的(time,lat,lon)变成了(lon,lat,time),和Dimentions和Coordinates中的位置一致了。当然可根据个人需要修改成自己想要的位置。如果想让原位置不动,更改变量部分的维度位置,使用transpose即可,内部写好目标维度的位置。首先读取nc文件并查看内部维度分布情况。发现其与变量内部排布顺序一致了。_xarray transpose

【Python | hashlib】使用hashlib计算安全哈希SHA1, SHA224, SHA256, SHA384 和 SHA512 以及 RSA 的 MD5_hashlib.sha256-程序员宅基地

文章浏览阅读438次。时间流逝吧,你是多么的残酷。时间停止吧,你是多么的美丽。_hashlib.sha256

uniapp开发小程序-如何判断小程序是在手机端还是pc端打开_uniapp 判断电脑还是手机访问微信小程序-程序员宅基地

文章浏览阅读2k次,点赞5次,收藏5次。api获取平台值,如果值是。_uniapp 判断电脑还是手机访问微信小程序

Android Jetpack 应用架构指南_android jetpack 架构指南-程序员宅基地

文章浏览阅读1.2k次。移动应用用户体验在大多数情况下,桌面应用会将桌面或程序启动器当做单个入口点,然后作为单个整体流程运行。Android 应用则不然,它们的结构要复杂得多。典型的 Android 应用包含多个应用组件,包括Activity、Fragment、Service、内容提供程序和广播接收器。您需要在应用清单中声明其中的大多数应用组件。Android 操作系统随后会使用此文件来决定如何将您的应用集成到..._android jetpack 架构指南

MATLAB错误记录:在当前文件夹或MATLAB路径中未找到文件_错误使用 h5infoc 指定的文件名要么在 matlab 路径中未找到,要么包含不支持的字符-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏13次。最近跑一个基于MATLAB的程序,源代码添加进去以后总是报错:在当前文件夹或MATLAB路径中未找到文件。我寻思我路径添加了,命名规则也符合啊。想了一下,原来是MATLAB添加路径只默认添加当前目录。当前目录下的子目录需要你自己添加一下:addpath(genpath(pwd))当前目录下的子目录就可以全部添加啦!记录一下怕我把这两个命令忘了……..._错误使用 h5infoc 指定的文件名要么在 matlab 路径中未找到,要么包含不支持的字符

【idea】idea中编译内存不足(java: java.lang.0ut0fMemoryError: Java heap space)的解决方法_idea java: outofmemoryerror: 内存不足-程序员宅基地

文章浏览阅读832次,点赞12次,收藏9次。在编译一个较大的idea项目时候,有时候会显示内存不足,导致项目编译失败。_idea java: outofmemoryerror: 内存不足

随便推点

Selenium安装WebDriver最新Chrome驱动_selenium webdriver.chromiumdriver-程序员宅基地

文章浏览阅读248次,点赞4次,收藏5次。学习参考的这一篇博客,因各方面有更新,所以写一版记录自己的学习过程。测试一下,运行下面的python代码,能打开百度网页即可。因为我的版本是123(看大版本),点Stable。选择对应的版本,复制网址打开就自动下载了。解压放到谷歌浏览器安装的位置。,回车后即可查看到对应版本。在浏览器的地址栏,输入。点开之后是这个样子的。去环境变量里添加位置。_selenium webdriver.chromiumdriver

Linux常用安装命令_sudo yum install dos2unix路径-程序员宅基地

文章浏览阅读1.1w次,点赞6次,收藏19次。Linux常用命令1、Cnetos7使用yum安装nginx查看gcc版本gcc -vgcc安装命令yum -y install gcc安装openssl# openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。yum install -y openssl openssl-devel安装nginxyum install -y nginx启动并设置开机自启sudo systemctl start nginxsudo_sudo yum install dos2unix路径

外贸行业企业邮箱选择:安全好用的邮箱服务-程序员宅基地

文章浏览阅读856次,点赞20次,收藏13次。随着全球化的发展,外贸行业在全球经济中越来越重要。作为一家从事对外贸易的企业,可靠、安全、易用的邮箱系统对于成功的国际交易至关重要。为您的企业选择正确的邮箱解决方案可能是一个挑战。为了使选择过程更加简化,我们在这里提供了一些提示,以帮助您选择最适合您的外贸企业的邮箱解决方案。!

嵌入式开发必备知识_嵌入式软件开发的知识清单-程序员宅基地

文章浏览阅读2.1k次,点赞6次,收藏102次。我们在调试程序时,经常会遇到某段功能的实现,写了两种版本的程序,但调试时又不想来回切换。,这时候我们可以使用条件变量。比如:想测试__set_FAULTMASK(1);和__disable_fault_irq();的区别,就可以使用如下方式,只需要更改#if后面是1还是0就可以选择是使用哪段程序。# endif1# endif串口(UART通用异步收发器,TTL)通讯是一种设备间的串行全双工通讯方式。_嵌入式软件开发的知识清单

Kyligence Data + AI 落地迈向新阶段,企业级 AI 解决方案发布-程序员宅基地

文章浏览阅读872次,点赞14次,收藏6次。4月11日,Kyligence 2024 数智论坛暨春季发布会成功召开。Kyligence 正式发布全新的企业级 AI 解决方案,基于服务金融、零售、制造、医药等行业领先客户的落地实践,Kyligence 为企业提供准确、可靠、智能的 AI + 指标平台一站式解决方案,以行业领先的技术和稳定可靠的产品助力更多客户在数智化浪潮中掌握先机。

ant design vue a-checkbox 超出换行_a-checkbox-group 自动换行-程序员宅基地

文章浏览阅读301次。a-checkbox 超出换行_a-checkbox-group 自动换行