Junit4 一直处于运行中的排查过程
2023-06-28 12:18:33 博客园

新买了一个Macbook Pro . 之前的工程搬家过来, 这天要跑个单元测试。 发现Junit4 一直处于运行中。没有错误信息,没有用例执行结果。遂开始排查原因。


(资料图)

这里插一句,苹果芯片的Mbp还是很好用的,除了性能够用之外,最主要是安静+不热。 这对比我之前的i7版本的真是太明显了。 之前的i7在外接显示器的情况下,风扇狂转,还降频。苹果抛弃Intel还是有道理的。

回正题, 这类比较诡异问题的排查,一般思路就是猜+试 ,但试和猜的逻辑要清晰。本文主旨也是在于思路总结。

一、测试类是不是写的有问题?

很好排查,跑跑其他之前写的测试类, 果然也不好用了。 说明跟具体的测试类无关。

二、是工程的问题还是我自身环境的问题?

小X, 我这儿为啥跑不了单元测试了。 你试试能跑了。 小X: “我这里可以跑,没问题”。 可见应该跟我的环境配置有关。

——持续在执行中,且没有错误,并且与个体环境有关。 如果有经验的同学,很容易想到,这可能说明,测试过程在正常执行,只是非常缓慢。环境相关的性能问题,往往与网络有关。

三、化简工程后,是否正常工作?

实际项目的工程往往比较复杂, 管理的Bean动辄,几百上千。 这些Bean可能有各种初始化方法, 阻塞了程序的启动,导致了Junit 卡在Spring上下文建立的过程中。测试过程就无法开始运行。

因此,缩小扫描路径范围, 对一个依赖其他Bean较少的Bean做单元测试。 发现执行正常。

——这说明应该确实是卡在了某些Bean的创建过程中

四、缩小范围

从上面的试验结果很容易想到,如果逐步将Beans加入到扫描路径,就可以定位出具体是哪个Bean引起的阻塞问题。经过尝试发现,工程用到了dubbo,其中的 provider service 越少,@Test执行的越快,当多到一定程度时,

就会表现为,一直处于运行中的状态了。

——这里已经可以定位到,导致问题的表面原因了。猜测可能是dubbo与注册中心的网络通信过程,造成的影响。

五、源码调试

开源的好处是,源码之前了无秘密,但通常源码也没那么容易看懂 o(* ̄︶ ̄*)o。 跟了一段执行过程的源码,暂时没有发现明确的原因

——源码面前了无秘密肯定是真理,耐心跟一定会发现原因的。

六、柳暗花明

跟源码跟的不耐烦之际,觉得这么调有点费劲。想在忙碌的过程中直接调试器暂停执行,也许会断到引起阻塞的问题代码附近。于是,重新调试执行测试,在等待一段超出正常范围的时间后,按下调制器的暂停。

通过调用栈往上找找,果然是在dubbo的包内。观察了下附近有一个非常可疑的。

InetAddress.getLocalHost().getHostAddress()

ChatGpt了下,Gpt说:注意:在生产环境中,反复调用 InetAddress.getLocalHost().getHostAddress()是不推荐的,因为这可能是一个耗时的操作。通常,获取本地IP地址是一个一次性的任务,应该在应用程序启动时执行,并缓存结果以供后续使用。

然后阅读了附近的源码,发现dubbo当取得prodiver 的hostip 是 127.0.0.1 或者 localhost 时。会调用这个方法, 取得一个网络上的IP。(例如192.168.1.X之类)。

尝试将prodiver 的 host 从 127.0.0.1 配置为 网络IP后, 问题解决。

总结:

问题的原因是当provider host配置为 127.0.0.1 时,会调用耗时操作。 当provider 提供的service 很多时。就会成倍放大这个耗时操作的时间。这个原因跟猜测,以及经验,现象都是能相互验证的。

宝贵经验:

1.InetAddress.getLocalHost().getHostAddress()是一个耗时操作,在某些网络环境下可能非常慢。

2.今后遇到这种一直执行中不报错的情况,应该直接点暂停,读源码 -_-||。

热门推荐

文章排行

  1. 2023-06-28Junit4 一直处于运行中的排查过程
  2. 2023-06-28外径符号怎么用电脑打出来的_外径符号怎么用电脑打出来-当前聚焦
  3. 2023-06-28祁阳市医保局举办异地就医直接结算政策集中宣传活动
  4. 2023-06-28环球动态:青海省红十字会开展2023年应急救援“大练兵”
  5. 2023-06-28天天要闻:《幽灵诡计》M站83分:获得第二次生命的杰作
  6. 2023-06-28观察:省应急管理厅开展网络安全培训及“闽盾
  7. 2023-06-28每日头条!​U19男篮世界杯中国队两连败
  8. 2023-06-28长沙“国际门户”规划再升级!超千亿级“中央商务轴”首次亮相-世界时讯
  9. 2023-06-2812家公司披露股票回购预案 天合光能拟回购不超6亿元
  10. 2023-06-28199开头的手机号码是哪里的-今日关注
  11. 2023-06-28农业农村部郑重声明 全球新资讯
  12. 2023-06-28文相辉-当前快讯
  13. 2023-06-28比特币火爆行情催生非法炒作活动,欧易“借道”营销 天天快播
  14. 2023-06-28首付比例20%_首付比例_天天观速讯
  15. 2023-06-28【环球新要闻】哺乳枕检出致癌物_哺乳枕是智商税吗
  16. 2023-06-28全球微动态丨怎样才能减掉大肚腩民间偏方_怎么减大肚腩最有效
  17. 2023-06-27哇哦,迪卡侬造车了!!!-天天亮点
  18. 2023-06-27热文:公安部交管局部署开展夏季交通安全整治行动
  19. 2023-06-27焦点快播:迎峰度夏|娄底变电检修公司对电网设备进行全面“体检”
  20. 2023-06-27中能北方的控股子公司国泰同怀与新宝同怀共同出资3000万设立孙公司 其中国泰同怀出资1530万|环球热议