golang httpServer http.ResponseWriter 的 Write() 方法调用之后,服务器的QPS由原来的3万降到了7000。
代码如下:
func (s *ZService) writeResp(resp *ZMsg, w http.ResponseWriter) {
..............
payload, err := ioutil.ReadAll(reader)//reader is a io.Reader
if err == nil {
w.Write(payload)//w.Write(make([]byte, 50))效果一样
}else {
log.Warningf("read stream failed, err[%v]", err)
}
.............
}
如果我的 http 响应不执行 w.Write()
,即只有 http header,那么QPS能达到3万。求大牛帮忙分析分析。
这个个人觉得不一定是ResponseWriter写的慢, 或者说ResponseWriter慢可能有多种原因。golang的TCP相比于有JIT优化的语言来说,可能不是特别高,当然这个版本的go还是比较久远的,测试结果见bench mark ,但你有观测到客户端的load吗,有没有可能是客户端的load 比较大,然后影响了服务器的Request,这种测试,建议多部署一些客户端节点,保证客户端load正常,CPU和IO都不会是影响服务器回包的瓶颈,这样才好评测是否由于客户端的load问题阻塞了server的response.
另外,writeResp是一个routine吗