TCP Keepalive 为什么救不了你的长连接
一个运行良好的 WebSocket 服务,突然在凌晨三点开始大面积掉线。日志里只有 “connection reset” 的报错,没有任何其他线索。你检查了服务器状态——CPU 正常,内存充足,网络畅通。重启服务后一切恢复,但第二天凌晨同一时间,问题再次出现。 ...
一个运行良好的 WebSocket 服务,突然在凌晨三点开始大面积掉线。日志里只有 “connection reset” 的报错,没有任何其他线索。你检查了服务器状态——CPU 正常,内存充足,网络畅通。重启服务后一切恢复,但第二天凌晨同一时间,问题再次出现。 ...
1981 年 9 月,Jon Postel 发布了 RFC 793,定义了传输控制协议(TCP)的核心规范。这份文档中有一张著名的 TCP 状态转换图,包含 11 个状态和错综复杂的箭头指向。四十多年后的今天,这张图依然是网络工程师面试的必考题,也是无数系统故障排查的起点。 ...
2012年,Google 工程师 Jim Roskind 和他的团队面临一个看似无解的问题:TCP 协议已经统治互联网传输层近 40 年,但它的一些根本性缺陷让 Web 性能优化陷入瓶颈。他们决定做一个在当时看来近乎疯狂的选择——抛弃 TCP,用 UDP 从零重建一个传输协议。 ...
凌晨3点,你被电话叫醒——生产环境的核心服务大面积报错,错误日志里全是Connection reset by peer和ETIMEDOUT。你花了四个小时排查,发现罪魁祸首是一个从未被关注的超时配置:某台负载均衡器的空闲超时从60秒被改成了30秒,而你的数据库连接池配置的是55秒心跳间隔。 ...
你刚在远程服务器上执行了一个耗时两小时的数据库迁移脚本,眼看就要完成,切回终端一看——client_loop: send disconnect: Broken pipe。脚本进程随SSH会话一起灰飞烟灭,所有进度化为乌有。 ...