环境信息
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 调用超时,经过查看调用链路,绝大部分情况如下:
被调用方在调用方已经超时在之后才收到请求。现在超时时间设定为 3s,被调用方会在 3s 多一点接收到请求。而在之前超时为 1s 时,被调用方会在 1s 多一点接收到请求。
这个问题最棘手的点在于,它的出现没有任何规律,不同服务、不同时间段都有可能发生,有时只针对一个调用方,有时候是所有调用方。
我们怀疑是网络问题,但是粗粒度的 TCP 网络监控看不出任何问题,也不可能在不知道问题何时复现的情况下去抓包。假设是网络问题的话,我们又能从哪方面去改善此类问题呢?
这个问题已经困扰了我们半年,希望得到帮助。
原提问者GitHub用户liuzhiguo630
我提供一个思路仅供参考:如果默认使用dubbo配置的连接数,即一个consumer和一个provider只有一条TCP连接,可以增加日志或看下带宽,是不是出现了大数据包传输。如果某条内容数据内容比较大,比如整条数据超过1M,在高qps情况下,必然出现大量超时。
微观上,单条TCP通道上,还是顺序发送消息的,并且传输层会把单条数据分为每个包1500字节,共N个。在这个数据在被完整传输完之前,由于TCP可靠性、有序性的保证,其他的请求都只能排队等着,所以就超时了。。
原回答者GitHub用户fsx379
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。