开发者社区 > 云原生 > 正文

线上偶然会出现一批 Invoke remote method timeout,但服务本身没有超时

环境信息

Dubbo version: 2.7.6 Operating System version: Linux 3.10.0-1062.9.1.el7.x86_64 Java version: 1.8.0_212

步骤重现

线上正常调用偶然出现一批调用失败,调用方超时报 Invoke remote method timeout 我们排除了 GC、部署等一切有可能阻塞的因素,从网络的监控也未看到可疑的情况。

实际执行情况

有时线上会突然报一堆 RPC 调用超时,经过查看调用链路,绝大部分情况如下:

提问75.png

被调用方在调用方已经超时在之后才收到请求。现在超时时间设定为 3s,被调用方会在 3s 多一点接收到请求。而在之前超时为 1s 时,被调用方会在 1s 多一点接收到请求。

这个问题最棘手的点在于,它的出现没有任何规律,不同服务、不同时间段都有可能发生,有时只针对一个调用方,有时候是所有调用方。

我们怀疑是网络问题,但是粗粒度的 TCP 网络监控看不出任何问题,也不可能在不知道问题何时复现的情况下去抓包。假设是网络问题的话,我们又能从哪方面去改善此类问题呢?

这个问题已经困扰了我们半年,希望得到帮助。

原提问者GitHub用户liuzhiguo630

展开
收起
大圣东游 2023-05-11 20:00:21 353 0
1 条回答
写回答
取消 提交回答
  • 我提供一个思路仅供参考:如果默认使用dubbo配置的连接数,即一个consumer和一个provider只有一条TCP连接,可以增加日志或看下带宽,是不是出现了大数据包传输。如果某条内容数据内容比较大,比如整条数据超过1M,在高qps情况下,必然出现大量超时。

    微观上,单条TCP通道上,还是顺序发送消息的,并且传输层会把单条数据分为每个包1500字节,共N个。在这个数据在被完整传输完之前,由于TCP可靠性、有序性的保证,其他的请求都只能排队等着,所以就超时了。。

    原回答者GitHub用户fsx379

    2023-05-12 11:09:12
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载