本文主要是介绍Go 实现的小型web server,可以通过调用api来控制和消耗 CPU 占比。通常用于测试系统负载和性能。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
说明
Go 实现的小型web server,可以通过调用api来控制和消耗 CPU 占比。通常用于测试系统负载和性能。
代码在下面
编译和运行
-
在终端中编译代码:
go build
-
运行程序,然后调用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)}
}
这篇关于Go 实现的小型web server,可以通过调用api来控制和消耗 CPU 占比。通常用于测试系统负载和性能。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!