从火星车故障谈谈软件资源泄漏
从火星车故障谈谈软件资源泄漏
美国航空暨太空总署NASA的火星探测车“勇气”号和“机遇”号,在2003年6月10日和7月7日分别踏上飞往火星的旅程,它们在2004年1月4日和1月25日,分别在火星上不同的位置着陆。
在到达火星后,“勇气”号火星车于1月21日突然发生故障。之后“勇气”号瘫痪在火星表面上的时间长达3周之久。火星车发生故障的原因在于“软件出了毛病”,它的存储系统出现了问题。因为在它从地球飞往火星的半年多时间内,存储器里积聚了大量数据文件,超出了存储器的负荷,导致软件系统瘫痪。
存储资源只是冯.诺依曼体系结构中最常见的一种软件资源,资源耗尽的问题在各行各业也常常出现。窥一斑而见全豹,观滴水可知沧海。以此,对程序运行依赖的软件资源做了一个整理,谈谈如何避免资源泄漏问题。
程序本身正常运行依赖了非常多的软件资源。从运行环境来看,进程运行在OS或容器中,可能使用诸多系统软件资源,常见的有mem、cpu、disk、pids、fd、io、net、inode。从软件实体本身来看,通过线程资源提供计算能力,通过内存提供存储能力,通过文件提供磁盘、socket等设备通信能力,也提供了一些数据库连接、消息包、信号量等逻辑软件资源。
要避免软件资源使用泄漏,其实很简单,三步搞定:
1)首先,要识别软件资源。因为软件资源是一种有限的资源,需要先识别,再使用。往往很多资源泄漏的问题发生,就是因为开发人员没有意识到,使用而不释放资源,导致死机等各种问题发生。
2)其次,知道如何正确地访问资源。例如,C++中对象申请使用new,实现释放使用free,就会导致未知问题。
3)最后,永远记住一点。资源不再使用后,一定要保证资源可释放,不管你的代码如何组织。
- 点赞
- 收藏
- 关注作者
评论(0)