一行代码引发的“血案”
来源:互联网 发布:mac os 磁盘清理 编辑:程序博客网 时间:2024/04/30 08:46
今天想起来一件好玩的事, 给大家分享下。
事情发生在几年前, 那时候大家忙活完一个新需求, 终于上线了, 都想松一口气。
可是很快就发生了一件令人抓狂的事情, 刚上线的系统总是莫名其妙的崩溃, 每次都得重启才能解决。
更要命的是完全摸不到规律, 系统运行着运行着就down了, 毫不留情面。
赶紧组织人员检查, 开发人员拍着胸脯, 信心满满: 肯定不是我们的问题! 先查查是不是环境的问题!
内存使用, 正常 。
硬盘空间,正常。
检查日志, 正常, 更找不到什么OutofMemory。
难道是黑客入侵,工程师仔细检查系统日志,也没有什么蛛丝马迹。 我们的系统也不涉及到钱, 根本不值得入侵。
可是系统总是那么静悄悄的,冷酷的down机, 快把大家都逼疯了。
如果是你该怎么办?
怀疑了一圈别人的问题以后,最好也怀疑一下自己。
我们就开始严格的审查这个新需求新加的,和改动的代码,10几双眼睛不知道看了多少遍, 还是一无所获。
后来不知道是谁,偶然看到了程序中有这么一行可怕的代码: System.exit(1) , 然后赶紧检查它和这个改动的关系。
果然, 在改动之前,这行代码永远都不会被执行到, 相当于死代码, 它就像个定时炸弹躺着那里, 一动不动至少有5年了!
现在终于等来了被触发的一刻:虽然我们的这次改动离这个炸弹极其遥远, 但的确会导致程序会在某种情况下进入这一分支, 于是System.exit(1); 被执行,炸弹爆炸。 JVM悄无声息的退出了 !
重启系统, 还会进入这一分支,System.exit, 系统再次退出 :-)
就这么周而复始, 把我们这帮码农戏耍了好几天 :-(
所以各位同学,以后不要轻易使用System.exit了, 建议你也马上搜索一下你的项目, 看看有没有这个炸弹吧。
扫描二维码, 关注 coderising
加入码农翻身群135769418:和更多热爱编程的朋友交流
0 0
- 一行代码引发的“血案”
- 一行代码引发的"血案"
- 一行空行引发的血案
- 一段代码引发的血案
- ActiveX引发的“血案”
- size_t引发的血案
- 一个 * 引发的血案
- gets引发的血案
- Print 引发的“血案”
- lease引发的血案
- 一个“-”引发的血案
- MD5引发的血案
- 一个"/"引发的血案
- wrap_content引发的血案
- merge_all引发的血案
- PersistableBundle引发的血案
- 一段代码引发血案(查看你的杀毒软件灵敏度)
- 看球引发的血案
- Python实例应用
- java.net.BindException和java.net.SocketException
- nginx rewrite
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
- android listview 中item 子控件抢占焦点问题
- 一行代码引发的“血案”
- mongodb操作
- GetLastError用法
- ajax Session失效如何跳转到登录页面
- 玩转Protocol Buffers
- JS获取键盘ASCII码代码
- mac osx 下面shadowsocks 转换成http代理
- 方差与转动惯量
- Android Telephony中缩写含义