这个 bug 卡了我一下午,我人傻了。。

2024-11-22 13:28   北京  

大家好,我是负雪明烛,一个热爱分享的程序员。

我们有一个 Spark 任务,一直运行的很稳定。

前两天有个需求,要在这个任务里面加一个字段。按理来说,这个需求很简单,几分钟就能搞定。

但是在测试过程中,试了很多次都执行失败了。

错误原因有两个:

  1.  一部分 executor 出现了 OOM

  2. 一部分 executor 报了空指针 NPE 错误

因为 NPE 错误有完整的错误栈,可以看到是与数据填充有关的错误,所以我就一直盯着这个数据填充问题去排查了,比如有没有数据是 NULL 值。

按照这个思路排查了很久也没发现什么问题,而且线上任务已经执行了很久了都问题啊。。

上网搜资料、咨询大模型这个 NPE 错误怎么回事,也没有靠谱回答。

所以我就觉得很神奇,开始怀疑人生。

后来,跟同事交流的时候,他说他遇到过这个问题。

这个问题不复杂:executor 内存不够(线上是大内存,测试的时候选择了小内存),同时引发了 OOM 问题和 NPE 错误。

我把 OOM 问题忽略了,去了错误的排查方向,所以怎么也解决不了。

果然加了内存以后,作业测试通过就可以上线了。

通过这个排查经过,我发现自己在排查问题的时候倾向于优先解决“看起来”更显而易见的问题。

如果多个错误直接没有关联关系,这么做可以逐步逼近真相。

但是,如果多个错误本质上是一个错误的时候,那么就可能走偏,陷入到局部解里面。

下次遇到这种多个错误同时出现的情况,不妨想想它们是不是同一个原因导致的,或许解决起来更容易。

这是我通过一个 Bug 的反思,希望对大家有些帮助。


欢迎加我微信交流:

还有很多所见所闻想要分享,下期见!

关注我,大量干货内容,投递给您↓‍‍‍

我是「负雪明烛」,互联网大厂在职程序员,一个计算机知识分享者。

关注我,你可以获得优质算法题解、求职技巧、大厂内推、工作经验。

欢迎点击关注+星标⭐️!


历史文章推荐:
  1. 面试最常考的 100 道算法题分类整理!

  2. LeetCode 最经典的 100 道题

  3. 直播分享:LeetCode 应该怎么刷?

  4. 我的爆款算法题解是怎么创作出来的?

  5. 写了 1000 篇算法题解是什么体验?

  6. 如何保持好的工作状态?

  7. 我的读书理念和方法

  8. 当初学 C++ 要是知道这个网站就好了。。。

  9. 发现一个奇怪的现象:面试造火箭,工作拧螺丝。。

  10. 春招必杀技:项目经历脱颖而出的独家秘诀


负雪明烛
1000 篇算法题解的作者,国内互联网大厂程序员,技术分享爱好者。 爱好算法题解写作,擅长深入浅出讲解计算机知识,乐于分享大厂见闻。和读者一起刷算法题,拿 Offer,交朋友!
 最新文章