解决一次feign调用时间长的问题,一眼难尽,一波三折

公司布在客户机上的服务报超时,但是第二天客户就要第一次看演示,怎么办,急。还有一周要验收,怎么办?急死了。再有一个,我是刚入职不到7天的新人。系统还不熟悉。

  1. 首先在自己本机上跑,毫无压力,直接15ms跑完,没毛病。

  2. 直接去改参数配置,由于前面的开发日志写的不太全,导致我一个一个配置的找,感觉哪里会超时,就去改超时时间之类的。。

    • 改了数据源超时时间,还是不行。
    • 。。。
    • 改了OpenFeign的超时时间。成功了。执行成功了。就是耗时特别久。总算成功了,至少能应付明天的演示。
  3. 问题不能复现,也没有做监控之类的。所以只能打日志后,打包放到客户机上面跑起来。发现整个接口耗时27秒,feign调用耗时26.5秒。

  4. 怀疑是feign提供端代码的问题,继续打日志。发现feign接口里面耗时不到50毫秒。那看来就是feign调用的问题。其实这里就应该去查看写的AOP,filter,Intercepter这些有没有做拦截了,奈何我是个渣渣新人。

  5. 然后网上搜解决方案。

    • 修改JVM参数,重新启动,不行。

    • 又去查看堆信息。按照网上的说法,看了进程下面内存占用最大的线程,打印他的GC信息,发现有8个GC线程再等待。。然后,我就深陷在这里。一直以为是GC满了。

  6. 在这里搞了好久。我搞不懂。发生异常向上抛。抛了两个级别,找到了大哥。大哥就认为不是GC的问题。说是我们代码的问题。

  7. 然后大哥加入这个行列。找了两天,终于找到了shiro的一个tokenfilter里面。耗时两天是因为实在不能debug,只能慢慢打日志。

  8. 然后我又在这里面打日志,最终定位到一个方法:shiro的 一个登录验证方法。

subject.login(token)
  1. 由于我这个菜鸟新人没整过shiro,不知道他这里面的结构是什么。然后我又去学了一下shiro。

    1. subject
    2. SecurityManager
    3. SessionManager
    4. realm
  2. 最后找到是我们自定了一个UserRealm类。里面有个方法。

    InetAddress inet = InetAddress.getLocalHost();
    String ip = inet.getHostAddress();
    
  3. 就是这里耗时26.5秒。又上网搜,这个原因是啥。原因不知道。解决方法找到了。

  4. 只需要再客户机下

    vi etc/hosts
    

    文件里面加入hostname ip就行了。

  5. 最后完美解决,xiu~的一下接口跑完。

写在最后,由于自己是菜鸟,各种不会,才耗时一周,在多方大佬的帮助下才找到。感谢他们。

以后看代码还是要看的更深一些。

最后的最后,我这篇文章写在解决问题的一个月后,我记不起来参考的文章地址了,如有侵权,请联系我。谢谢大家的指正。

参考文章。解决获取IP超时:https://blog.csdn.net/weixin_39355187/article/details/113008689

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值