当前位置: 首页 > news >正文

Go 实现的小型web server,可以通过调用api来控制和消耗 CPU 占比。通常用于测试系统负载和性能。

说明

Go 实现的小型web server,可以通过调用api来控制和消耗 CPU 占比。通常用于测试系统负载和性能。
代码在下面

编译和运行

  1. 在终端中编译代码:

    go build 
    
  2. 运行程序,然后调用api,例如:

    ./tools_cpu_burner_by_api再打开另一个shell,在shell中执行
    curl http://localhost:8080/cpu_burner?p=20
    

    p=50表示使web server占用服务器总cpu使用量的20%,可以根据需要改为其他数值,
    如果p=0,则表示不额外触发cpu使用量

上代码

package mainimport ("fmt""net/http""runtime""strconv""time"
)var numCPU int
var p intfunc main() {numCPU = runtime.NumCPU()runtime.GOMAXPROCS(numCPU)fmt.Printf("Using %d CPUs\n", numCPU)go doCpuBurn()http.HandleFunc("/cpu_burner", cpuBurnerHandler)// 启动HTTP服务器fmt.Println("Server listening on :8080...")if err := http.ListenAndServe(":8080", nil); err != nil {panic(err)}
}func cpuBurnerHandler(w http.ResponseWriter, r *http.Request) {// 解析查询参数中的load和durationpercentageStr := r.URL.Query().Get("p")var err errorif percentageStr != "" {p, err = strconv.Atoi(percentageStr)if err != nil {http.Error(w, "Invalid load parameter", http.StatusBadRequest)return}}if p < 0 || p > 100 {http.Error(w, "Invalid load parameter", http.StatusBadRequest)return}var rsp stringrsp = fmt.Sprintf("Simulated CPU load for %d \n", p)fmt.Println(rsp)// 响应请求fmt.Fprintf(w, rsp)
}func doCpuBurn() {for i := 0; i < numCPU; i++ {go burnCPU()}}func burnCPU() {for {busyTime := time.Duration(p) * time.MillisecondidleTime := time.Duration(100-p) * time.Millisecondstart := time.Now()// Busy loopfor time.Since(start) < busyTime {}// Idle timetime.Sleep(idleTime)}
}

相关文章:

  • 电商API在维护数据安全与合规性中的重要性
  • 【Linux】Centos7升级内核的方法:yum更新(ELRepo)
  • 一键生成迷宫-Word插件-大珩助手新功能
  • RabbitMQ简单使用方法,以异步处理日志为例:
  • 西门子PLC学习之数据块的单个实例,多重实例与参数实例间的区别
  • codeforces round 949 div2
  • 【Linux】进程2——管理概念,进程概念
  • c++调用动态库LNK2019无法解析的外部符号LNK1120无法解析的外部命令
  • 【C++】植物大战僵尸杂交版自动存档——防闪退存档消失
  • 【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
  • 常见的api:Runtime Object
  • day 37 738.单调递增的数字
  • Springboot引入redis启动报错问题的解决
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • 【教程】如何实现WordPress网站降级(用于解决插件和主题问题)
  • JS 中的深拷贝与浅拷贝
  • Apache的80端口被占用以及访问时报错403
  • Babel配置的不完全指南
  • cookie和session
  • es的写入过程
  • HTTP 简介
  • javascript面向对象之创建对象
  • leetcode46 Permutation 排列组合
  • Linux链接文件
  • magento 货币换算
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • React as a UI Runtime(五、列表)
  • Terraform入门 - 1. 安装Terraform
  • nb
  • 阿里云服务器如何修改远程端口?
  • 大数据全解:定义、价值及挑战
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #预处理和函数的对比以及条件编译
  • ()、[]、{}、(())、[[]]命令替换
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (三)c52学习之旅-点亮LED灯
  • (三)mysql_MYSQL(三)
  • (三分钟)速览传统边缘检测算子
  • (一)SvelteKit教程:hello world
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ***监测系统的构建(chkrootkit )
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 调用海康SDK以及常见的坑解释
  • .NET学习教程二——.net基础定义+VS常用设置
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [1181]linux两台服务器之间传输文件和文件夹
  • [20161101]rman备份与数据文件变化7.txt
  • [22]. 括号生成
  • [Android]使用Retrofit进行网络请求
  • [APIO2012] 派遣 dispatching
  • [APUE]进程关系(下)