从火星车故障谈谈软件资源泄漏

举报
冰释流水 发表于 2021/08/25 09:58:56 2021/08/25
【摘要】 从火星车故障谈谈软件资源泄漏​ 美国航空暨太空总署NASA的火星探测车“勇气”号和“机遇”号,在2003年6月10日和7月7日分别踏上飞往火星的旅程,它们在2004年1月4日和1月25日,分别在火星上不同的位置着陆。在到达火星后,“勇气”号火星车于1月21日突然发生故障。之后“勇气”号瘫痪在火星表面上的时间长达3周之久。火星车发生故障的原因在于“软件出了毛病”,它的存储系统出现了问题。因...

从火星车故障谈谈软件资源泄漏

​ 美国航空暨太空总署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)最后,永远记住一点。资源不再使用后,一定要保证资源可释放,不管你的代码如何组织。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。