公司布在客户机上的服务报超时,但是第二天客户就要第一次看演示,怎么办,急。还有一周要验收,怎么办?急死了。再有一个,我是刚入职不到7天的新人。系统还不熟悉。
-
首先在自己本机上跑,毫无压力,直接15ms跑完,没毛病。
-
直接去改参数配置,由于前面的开发日志写的不太全,导致我一个一个配置的找,感觉哪里会超时,就去改超时时间之类的。。
- 改了数据源超时时间,还是不行。
- 。。。
- 改了OpenFeign的超时时间。成功了。执行成功了。就是耗时特别久。总算成功了,至少能应付明天的演示。
-
问题不能复现,也没有做监控之类的。所以只能打日志后,打包放到客户机上面跑起来。发现整个接口耗时27秒,feign调用耗时26.5秒。
-
怀疑是feign提供端代码的问题,继续打日志。发现feign接口里面耗时不到50毫秒。那看来就是feign调用的问题。其实这里就应该去查看写的AOP,filter,Intercepter这些有没有做拦截了,奈何我是个渣渣新人。
-
然后网上搜解决方案。
-
修改JVM参数,重新启动,不行。
-
又去查看堆信息。按照网上的说法,看了进程下面内存占用最大的线程,打印他的GC信息,发现有8个GC线程再等待。。然后,我就深陷在这里。一直以为是GC满了。
-
-
在这里搞了好久。我搞不懂。发生异常向上抛。抛了两个级别,找到了大哥。大哥就认为不是GC的问题。说是我们代码的问题。
-
然后大哥加入这个行列。找了两天,终于找到了shiro的一个tokenfilter里面。耗时两天是因为实在不能debug,只能慢慢打日志。
-
然后我又在这里面打日志,最终定位到一个方法:shiro的 一个登录验证方法。
subject.login(token)
-
由于我这个菜鸟新人没整过shiro,不知道他这里面的结构是什么。然后我又去学了一下shiro。
- subject
- SecurityManager
- SessionManager
- realm
-
最后找到是我们自定了一个UserRealm类。里面有个方法。
InetAddress inet = InetAddress.getLocalHost(); String ip = inet.getHostAddress();
-
就是这里耗时26.5秒。又上网搜,这个原因是啥。原因不知道。解决方法找到了。
-
只需要再客户机下
vi etc/hosts
文件里面加入hostname ip就行了。
-
最后完美解决,xiu~的一下接口跑完。
写在最后,由于自己是菜鸟,各种不会,才耗时一周,在多方大佬的帮助下才找到。感谢他们。
以后看代码还是要看的更深一些。
最后的最后,我这篇文章写在解决问题的一个月后,我记不起来参考的文章地址了,如有侵权,请联系我。谢谢大家的指正。
参考文章。解决获取IP超时:https://blog.csdn.net/weixin_39355187/article/details/113008689