我有一个非常消耗 CPU 的玩具网络应用程序func PerfServiceHandler(w http.ResponseWriter, req *http.Request) { start := time.Now() w.Header().Set("Content-Type", "application/json") x := 0 for i := 0; i < 200000000; i++ { x = x + 1 x = x - 1 } elapsed := time.Since(start) w.Write([]byte(fmt.Sprintf("Time Elapsed %s", elapsed)))}func main() { http.HandleFunc("/perf", PerfServiceHandler) http.ListenAndServe(":3000", nil)}执行上述函数大约需要 120 毫秒。但是当我用 500 个并发用户(siege -t30s -i -v -c500 http://localhost:3000/perf)对这个应用程序进行负载测试时,我得到了结果每个请求的平均响应时间 2.51 秒交易速率每秒 160.57 笔交易有人可以在下面回答我的问题吗:-当我运行 100、200、500 个并发用户时,我看到没有。当应用程序刚启动时,上述应用程序使用的操作系统线程数从 7 卡到了 35。增加并发连接数不会改变这个数字。即使当 500 个并发请求到达服务器时,操作系统线程的数量仍然停留在 35 个操作系统线程(应用程序以 runtime.GOMAXPROCS(runtime.NumCPU()) 启动)。当测试停止时,数字仍然是 35。有人可以向我解释这种行为吗?可以没有。以某种方式增加操作系统线程的数量(来自操作系统或来自 GOlang)?如果没有,这会提高性能吗?操作系统线程增加了?有人可以建议一些其他优化此应用程序的方法吗?
1 回答
- 1 回答
- 0 关注
- 296 浏览
添加回答
举报
0/150
提交
取消