返回介绍

一行代码引发的“血案”

发布于 2025-01-22 00:38:54 字数 1031 浏览 0 评论 0 收藏 0

今天想起来一件好玩的事, 给大家分享下。

事情发生在几年前, 那时候大家忙活完一个新需求, 终于上线了, 都想松一口气。

可是很快就发生了一件令人抓狂的事情, 刚上线的系统总是莫名其妙的崩溃, 每次都得重启才能解决。

更要命的是完全摸不到规律, 系统运行着运行着就 down 了, 毫不留情面。

赶紧组织人员检查, 开发人员拍着胸脯, 信心满满: 肯定不是我们的问题! 先查查是不是环境的问题!

内存使用, 正常 。

硬盘空间,正常。

检查日志, 正常, 更找不到什么 OutofMemory。

难道是黑客入侵,工程师仔细检查系统日志,也没有什么蛛丝马迹。 我们的系统也不涉及到钱, 根本不值得入侵。

可是系统总是那么静悄悄的,冷酷的 down 机, 快把大家都逼疯了。

如果是你该怎么办?

怀疑了一圈别人的问题以后,最好也怀疑一下自己。

我们就开始严格的审查这个新需求新加的,和改动的代码,10 几双眼睛不知道看了多少遍, 还是一无所获。

后来不知道是谁,偶然看到了程序中有这么一行可怕的代码: System.exit(1) , 然后赶紧检查它和这个改动的关系。

果然, 在改动之前,这行代码永远都不会被执行到, 相当于死代码, 它就像个定时炸弹躺着那里, 一动不动至少有5年了!

现在终于等来了被触发的一刻:虽然我们的这次改动离这个炸弹极其遥远, 但的确会导致程序会在某种情况下进入这一分支, 于是 System.exit(1); 被执行,炸弹爆炸。 JVM 悄无声息的退出了 !

重启系统, 还会进入这一分支,System.exit, 系统再次退出 :-)

就这么周而复始, 把我们这帮码农戏耍了好几天 :-(

所以各位同学,以后不要轻易使用 System.exit 了, 建议你也马上搜索一下你的项目, 看看有没有 System.exit 这个炸弹吧。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文