美文网首页
1.dubbo第一次调用慢问题

1.dubbo第一次调用慢问题

作者: 向上的萝卜白菜 | 来源:发表于2020-09-04 15:27 被阅读0次

1. 现象:

  服务重启后,首次a调用b,发现有点耗时,正常1s内返回,但是却5s后才返回。而且非常奇怪的是查看日志发现b服务5s后才收到请求并打印日志。

2.排查过程

  首先怀疑gc问题导致了停顿,因为之前遇到过一次,所以这次想当然了。但是服务刚启动后其实没有fullgc的,而且通过jstat -gc命令也验证gc耗时非常短。

  然后问题不断的重现,排查却陷入了停顿。

  然后走入了误区,在开发环境不断的跑代码测试,问题无法重现(开发环境为windows,测试环境为linux容器)

  后来思考了一下,怀疑可能网络问题导致,于是通过tcpdump抓包看看,发现b确实实时收到了报文,但是卡了5s才返回数据。初步结论应该是应用的问题了。

  再次查看应用逻辑,不存在卡顿问题,忽然想起某个版本开始加了自定义的dubbo filter,也就是从这个版本开始出现了问题。查看filter代码,打印日志时,日志内容加了调用RpcContext.getContext().getRemoteHostName()获取ip地址,后来去掉后问题解决。

  之前看到网上说其方法获取ip地址时有问题,比较慢,后面再研究一下。

3.后记

  跟踪getRemoteHostName方法,发现最后调用的是InetAddress.getHostName()方法: 根据ip获取机器名称或域名。

  该方法需要调用dns进行解析,耗时较长,如果dns没有找到会返回ip。流程大概是这样: b服务收到a服务的ip后,根据ip调用dns解析机器名,但是解析失败了,所以最后返回了ip。

  为什么解析失败了呢?我们测试环境使用的是k8s,对应的ip、域名都是k8s管理的,dns中肯定是没有的,所以会因超时而失败,从而最终导致了5s超时。但开发环境是windows,且在域中,所以耗时很短,并且可以获取到域名,所以没有问题。

相关文章

  • 1.dubbo第一次调用慢问题

    1. 现象: 服务重启后,首次a调用b,发现有点耗时,正常1s内返回,但是却5s后才返回。而且非常奇怪的是查看日...

  • 1.dubbo服务暴露机制

    1.dubbo解析xml标签 涉及的类为DubboBeanDefinitionParser,parse类会调用重载...

  • dubbo的Filter机制

    1.dubbo调用过程 以dubbo官方demo为例,在provider端,从netty接收到消息,递交给业务线程...

  • dubbo和springcloud的区别

    两者都是微服务框架 1.dubbo是基于RPC(远程过程调用)的框架 springcloud是基于http的res...

  • 01-Dubbo简介

    1.Dubbo简介: Dubbo是一个分布式,高性能,透明化的RPC服务框架(RPC:远程过程调用协议) SOA:...

  • Dubbo夺命17连问

    目录 1.Dubbo是什么?RPC又是什么? 2. Dubbo能做什么? 3.能说下Dubbo的总体的调用过程吗?...

  • Dubbo宝典18问~~~

    1.Dubbo是什么? Dubbo是阿里巴巴开源的一个远程服务调用分布式框架。其核心部分包括:集群容错,提供基于接...

  • (2) dubbo的入门使用

    1.dubbo的架构 调用关系说明1.服务容器负责启动,加载,运行服务提供者。2.服务提供者在启动时,向注册中心注...

  • 小程序接口返回耗时太长,浏览器却正常

    问题:解决接口响应慢,waiting(TTFB)时间过长 浏览器响应: 小程序响应: 思考:浏览器通过ajax调用...

  • JVM问题排查和常见问题分析章

    Java开发中的常见问题: 依赖版本冲突问题 OOM 机器负载很高 方法调用速度异常的慢 代码逻辑不符合预期,该执...

网友评论

      本文标题:1.dubbo第一次调用慢问题

      本文链接:https://www.haomeiwen.com/subject/vgwzsktx.html