写在前面的话
应某位友人需求,帮整理下工作中的发生的一些值得记录的文章。于是在友人描述后,为其整理为了文章,供大家一起参考探讨。
问题描述
在我们中应用有一个使用到`Http Long Poll`的场景,它需要一个http请求保持最长30秒,用于即使获取到最新的数据。在k8s环境下,发现应该存在偶发的异常,表现为长连接没有正常关闭,抛出异常:
java.net.SocketException: Unexpected end of file from server
问题排查
- 应用异常排查
首先我们先对应用程序的代码进行了排查,并没有发现代码上的bug,可以排除是由于代码bug导致的这个问题。
- 抓包
接下来考虑的方式就是抓包,分别在三个节点上进行抓包:应用程序所在pod、ingress-nginx所在pod、服务端pod。
分别执行以下shell脚本:
tcpdump tcp -s 0 -w ./target.cap
抓取当前网卡下的所有tcp流量,然后使用wireshark进行分析。发现了一个比较奇怪的现象: