文章预览
大家好,我是飞哥! 就在前几天,我们在灰度上线时遇到了一个服务程序闪退的问题。最后排查的结果是因为一个小小的网络 SIGPIPE 信号导致的这个严重问题。 今天,我就用一篇文章来介绍下 SIGPIPE 信号是如何发生的、为啥该信号会导致进程的闪退、遇到这种问题该如何解决。 让我们开启今天的内核原理学习之旅! 故障背景 我们对某个核心 Go 服务进行了 Rust 重构。由于源码太多,全部重构又不太现实。所以我们采用的方案是将部分代码用 Rust 重构掉。在服务进程中,Go 和 Rust 通过 cgo 进行通信。 但该新服务在线上遇到了崩溃的问题。而且崩溃还不是因为它自己,而是它依赖的另一个业务进程热升级的时候出现的。只要对该依赖热升级,就会导致该新服务崩溃退出,进而导致线上 SLA 出现较为严重的下降。 好在是灰度阶段,影响不大。当时临时禁
………………………………