| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 线上502问题居然是它导致的! -> 正文阅读 |
|
[系统运维]线上502问题居然是它导致的! |
记一次线上502问题排查过程。 现象article-go微服务有请求502,之前稀稀拉拉有少量的502(有同学排查过,未果),但是运维同学最近升级了ingress,502变多了。 信息收集大量的TW登录article-go容器,使用 首先TIME_WAIT就非常可疑,先看下TCP的四次挥手过程: 发现只有客户端的连接状态才可能是TIME_WAIT,我们article_go明明是服务端,怎么会有TIME_WAIT状态呢(这个是(我)一个认知错误,后面会提到)? 抓包随便找了一次接口请求,发现是正常的,先3次握手建立连接,然后request、response都很正常。 想到http 1.1里面服务端response的时候是可以加一个 发现正常,服务端没有设置header头主动断开链接。 那是咋回事?脱发中。。。 查疑解惑第一个疑惑为什么服务端会有TIME_WAIT状态? 这其实是我的一个认知错误(也是下面这个图有歧义的地方,不知道你们有没有,如果有,请点赞👍)。
客户端在建立连接之后,等待5秒之后关闭连接,服务端在接受到请求之后,立即调用
在5秒内,server发布fin,并且已经得到了client的ACK
5秒后,client close,服务端状态变成TIME_WAIT,客户端完全释放
服务端主动断开链接确实会有TIME_WAIT状态,和线上现象一致。所以问题排查方向就改成为什么服务端会断开链接? 第二个疑惑为什么服务端要主动断开链接? 这个问题问得好,看代码没有可疑的地方,一时间不知道如何排查了(此处掉了2根头发)。 但是有一个现象可疑是——只有article-go服务会502,api-go服务不会。 我本地分别启动了
Api-go的:
唯一的区别是 而且我发现(书读少了), 网上找了一个图,描述了ReadTimeout的计算范围。但是不太可能啊,这个过程不太可能会超过2s。 然后无意间看到这段段代码,原来go http server在没有设置
终于,我,停.止.了.脱.发。。。 总结
认知不准确,超时时间是指什么?read超时?write超时? 其实链接的问题,主要是idle链接的问题。再直白点,就是idle链接的超时时间设置(对应nginx就是keepalive_timeout参数,对应go http就是idleTimeout参数)。此外服务端的WriteTimeout也会有影响。
一般情况下是这样,但是服务端也是可以主动断开链接的,重新学了下TCP4次挥手过程,有了深刻认识。
认知不准确,再http 1.0里面是需要显示的增加这个header头,但是在http 1.1里面这个header是默认值,可以不用加。 另外Connection: close这个header头在http 1.0里面是默认值(默认是短链接),在http 1.1里面需要手动增加该header头(通常用于服务端发布过程中,老服务响应时让客户端断开链接,然后和新服务建立连接)。 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Connection
事后发现了一篇文章总结的非常到位,推荐所有人都看下。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 20:10:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |