皇冠色碟博彩网站评测_排查 Go 斥地的 HttpClient 读取 Body 超时

发布日期:2023-10-30 02:58    点击次数:153

皇冠色碟博彩网站评测_排查 Go 斥地的 HttpClient 读取 Body 超时

皇冠色碟博彩网站评测_

乐鱼百家乐

记一次go httpclient [读取反应Body超时]的排查历程。

皇冠客服飞机:@seo3687

本年度解锁的第一个手段。

皇冠足球比分 1故障现场

本东谈主讲求的主备集群,发出的 HttpClient 请求有 30%概率超时, 报context deadline exceeded (Client.Timeout or context cancellation while reading body) 至极

Kibana 线路 Nginx 管理请求的耗时request_time在[5s-1min]区间波动, upstream_response_time在 2s 级别。

是以咱们认定是 Nginx 向客户端回传 50M 的数据,发生了网罗蔓延。于是将 HttpClient Timeout 从 30s 疗养到 60s, 上线之后彰着改善。

他表示开发中的《马里奥》3D新作将是首款开放世界3D《马里奥》游戏,由任天堂企划制作本部开发。考虑到《塞尔达》和《宝可梦》系列已经做出尝试,《马里奥》系列迈出这一步也并不意外。

But 昨天又出现了一次相似的超时至极

time="2022-01-05T22:28:59+08:00" 乐鱼百家乐.... time="2022-01-05T22:30:02+08:00" level=error msg="service Run error" error="region: sz,first load self allIns error:context deadline exceeded (Client.Timeout or context cancellation while reading body)" 
 2线下复盘

go的HttpClient Timeout包括结合、重定向(若是有)、从Response Body读取的时代,内置定时器会在Get,Head、Post、Do 挨次之后不时运行,直到读取完Response.Body.

Timeout specifies a time limit for requests made by this Client. The timeout includes connection time, any redirects, and reading the response body. The timer remains running after Get, Head, Post, or Do return and will interrupt reading of the Response.Body.

Kibana 线路 Nginx 管理请求的耗时request_time才 32s, 远不到咱们关于 Http 客户端确立的 60s 超时阈值。

皇冠体育

这里有必要穿插 Nginx Access Log 的几个布景点

1.Nginx 写日记的时代 笔据nginx access log[1]官方,NGINX writes information about client requests in the access log right after the request is processed. 也等于说 Nginx 是在端到端请求被管理完之后才写入日记。

2.Nginx Request_Time upstream_response_time

$upstream_response_time – The time between establishing a connection and receiving the last byte of the response body from the upstream server

从 Nginx 向后端拔擢结合启动到接收完数据然后关闭结合为止的时代

$request_time– The total time spent processing a request

Nginx 从接收用户请求的第一个字节到发送完反应数据的时代

皇冠体育

从现在的信息看,Nginx 从接收请求到发送完反应流,悉数耗时 32s。那剩下的 28s,是在那处耗尽的?

3三省吾身

这是我抽离的 HttpClient 的实行, 通例的不成再通例。

package main  import (     "bytes"     "encoding/json"     "io/ioutil"     "log"     "net/http"     "time" )  func main() {       c := &http.Client{Timeout: 10 * time.Second}       body := sendRequest(c, http.MethodPost)       log.Println("response body length:", len(body)) }  func sendRequest(client *http.Client, method string) []byte {       endpoint := "http://mdb.qa.17usoft.com/table/instance?method=batch_query"       expr := "idc in (logicidc_hd1,logicidc_hd2,officeidc_hd1)"       jsonData, err := json.Marshal([]string{expr})       response, err := client.Post(endpoint, "application/json", bytes.NewBuffer(jsonData))       if err != nil {           log.Fatalf("Error sending request to api endpoint, %+v", err)       }       defer response.Body.Close()       body,欧博注册网址 err := ioutil.ReadAll(response.Body)       if err != nil {           log.Fatalf("Couldn't parse response body, %+v", err)       }       return body } 

中枢就两个手脚

财富自由皇冠博彩 网址 调用Get、Post、Do挨次发起 Http 请求, 若是无报错,则暗意奇迹端已料理理了请求 iotil.ReadAll暗意客户端准备从网卡读取 Response Body (流式数据), 超时至极恰是从这里爆出来的

报错执行:"Client.Timeout or context cancellation while reading body" 读取 Response Body 超时,

潜台词是:奇迹器已料理理了请求,况且启动向客户端网卡写入数据。

笔据我有限的网罗旨趣/预计机旨趣,与此同期,客户端会异步从网卡读取 Response Body。

写入和读取互不扰乱,然而时空有肖似。

是以[读取 Body 超时]位于图中的红框区域,这就有点真义了。

之前咱们有 30%概率[读取 Body 超时],如实是因为 Nginx 回传 50M 数据超时,这在 Nginx request_time 上能体现。 本次 Nginx 线路 request_time=32s, 却再次超时,推断 Nginx 仍是写完数据,而客户端还莫得读取完 Body。

至于为什么没读取完,这就得吐槽iotil.ReadAll的性能了。客户端使用 iotil.ReadAll 读取大的反应体,会不断恳求内存(源码线路会从 512B->50M),耗时较长,性能较差、况且有内存表现的风险。客户端机器稍有差池,可能就会导致读大Body超时, 下一篇我会西宾针对大的反应体替换iotil.ReadAll的决议[2]。

博彩网站评测皇冠色碟皇冠一直以来博彩市场佼佼者,全球范围内享有盛誉。不仅仅是因为提供丰富多样赌博游戏,一直坚持公平公正经营理念,深受玩家信任喜爱。365bet官网

为了模拟这个偶发的情况,咱们可在Post、iotil.ReadAll前后加入时代日记。

$ go run main.go 2022/01/07 20:21:46 启动请求: 2022-01-07 20:21:46.010 2022/01/07 20:21:47 奇迹端管理截止: 2022-01-07 20:21:47.010 2022/01/07 20:21:52 客户端读取截止: 2022-01-07 20:21:52.010 2022/01/07 20:21:52 response body length: 50575756 

不错看出,当读取大的反应体时候,客户端iotil.ReadAll的耗时并不算小,这块需要斥地东谈主员疼爱。

咱们以致不错iotil.ReadAll之前time.Sleep(xxx), 就能松驰模拟出身产环境的读取 Body 超时。

4我的得益

1.Nginx Access Log 的时代含义

2.go 的 HttpClient Timeout 包含了结合、请求、读取 Body 的耗时

皇冠体育在线投注平台

3.通过对[读取 Body 超时至极]的分析,我梳理了端到端的请求耗时、客户端的举止耗时的时空相干, 这个至关垂危。

援用联结

[1] nginx access log: https://docs.nginx.com/nginx/admin-guide/monitoring/logging/

[2] 替换iotil.ReadAll的决议: https://stackoverflow.com/questions/52539695/alternative-to-ioutil-readall-in-go

 



上一篇:没有了    下一篇:贝博三公博彩平台是否支持电脑客户端_囧叔:鲁加尼已效率尤文8年素质丰富,他的抢断让我念念起巴尔扎利