🔥🔥网络之谜:记一次失败排查的故事

在这篇文章中,我们将详细探讨导致故障的可能原因以及解决方案,以便更好地理解故障排查的复杂性和艰巨性,尤其是当出现与本次故障表现相似的问题时。

故障的表现

首先,让我们回顾一下故障的表现。在客户端调用接口时,发现一直在转圈等待,而服务器端却收到了请求并在返回结果给客户端时报了一些错误,包括java.io.IOException: Broken pipe错误和Connection reset by peer错误。尽管整个查询链路所需时间并不长,大约在2秒左右,但通过使用grafana监控工具,我们发现Nginx的连接数超过了平时的6倍以上。尽管我们已经仔细检查了各个方面的原因,但仍未找到根本问题所在。但是,我们最终注意到重启服务可以解决问题,因此我们将目标问题的范围锁定在服务器端。

pinpoint错误请求数及其分布

Nginx当时的连接数:当时是个很正常日子,并没什么活动

问题排查

然而,为什么会出现这样的问题呢?主要原因在于监控手段不足,甚至无法生成基本的Java dump文件。在排查过程中,我们只能看到现象而无法找到具体原因。通过pinpoint平台(类似于skywalking),我们发现了三种基本错误。第一种是之前提到的java.io.IOException: Broken pipe,第二种是Connection reset by peer,第三种是服务器访问第三方服务器时出现的connection timeout或refuse connection错误。虽然之前也发生过类似的问题,但都是偶尔出现,并没有像这次一样数量如此之多,占用了访问量的1/10。因此,在出现问题时,我们没有立即重启,而是进行了仔细排查。然而,最终我们以失败告终,只能依靠重启来解决问题。如果你有任何想法,请在下方评论区留言。

首先,我们排除了一些问题,如数据库查询、中间链路的转发、第三方服务器的调用等,均未发现问题。尽管我们确实可以确定问题出在服务器节点上,但具体原因仍然是个谜。

在继续探索之前,让我们先了解一下故障排查的一般步骤。首先,我们需要收集足够的信息来了解故障的具体表现。这包括错误日志、监控指标、性能数据等。在本次故障中,我们已经通过监控工具获取了一些有用的信息。接下来,我们需要分析这些信息,并进行合理的假设和推断。我们还可以尝试在类似的环境中重现故障,以进一步观察和分析。当我们找到可能的原因时,可以进行一系列的测试和验证,以确定是否解决了问题。最后,我们需要记录和总结我们的调查过程,以便于日后的参考和经验积累。

在本次故障排查中,我们遇到了一些挑战。首先是监控手段不足的问题,由于JDK版本的问题导致无法生成Java dump文件。这使得我们无法深入了解故障的具体原因。因此,我们建议在类似的情况下,提前准备好足够的监控工具和技术手段,以便更好地进行故障排查。

另一个挑战是故障的复现。由于问题并非每次都发生,我们无法简单地通过重现来解决。在这种情况下,我们尝试了在生产环境协调客户获取账号,并确实复现了问题所在,最终确定了是某一个节点连接数飙高导致无法处理请求导致的,但是为什么会某一个节点单独飙高就不得而知。

最后,我们需要注意故障排查的方法和技巧。在排查过程中,我们应该保持冷静和耐心,避免盲目猜测和随意尝试。我们应该以科学的态度,根据收集的信息进行分析和推理,不断迭代和验证。同时,我们还应该注重团队合作和知识共享,通过不同的视角和经验来解决问题。

总结

总之,本次故障排查虽然以失败告终,但我们从中学到了很多经验和教训。故障排查是一项复杂而重要的任务,需要我们具备专业知识和技术手段。同时,我们还需要保持冷静和耐心,以科学的态度进行分析和推理。只有这样,我们才能更好地解决问题,并为日后的故障排查积累宝贵的经验。

相关推荐
凤山老林6 分钟前
高保真集成测试:Spring Boot 结合 Testcontainers 的工程落地
spring boot·后端·集成测试
步行cgn9 分钟前
MyBatis <trim> 标签完全解析:动态 SQL 的终极武器
后端
XPoet13 分钟前
AI 编程工程化:实战——从 0 到 1 搭建 AI 编程工作流
前端·后端·ai编程
掘金者阿豪14 分钟前
向量数据库不是终点,企业AI真正需要的是融合数据库
后端
程序员cxuan18 分钟前
OpenAI Linux 版来了!
人工智能·后端·程序员
大黄评测22 分钟前
Angular 表单:响应式表单高级用法,Typed Forms 类型化表单实战
后端
大勇前进23 分钟前
Angular 变更检测深度讲解:OnPush 策略什么时候用、踩过哪些坑
后端
拾光师27 分钟前
Python 解析 JSON 日志:从一行数据到一份报告
后端
-今昭-29 分钟前
Logstash 管理
java·服务器·前端
小强198831 分钟前
RxJS 在 Angular 项目最佳实践:彻底告别内存泄漏,用好 asyncPipe
后端