内存中存储的数据在断电后完全消失还是部分消失,如果是完全消失,那

内存中存储的数据在断电后完全消失还是部分消失,如果是完全消失,那,第1张

你的理解是正确的。断电后,内存中的所有信息,包括病毒都会消失。但是问题不在这里。当我们开机后,所有要运行的程序,包括我们的 *** 作系统,都必须要调入到内存中才能执行。而病毒恰恰就隐藏在这些文件当中。当我们运行来带病毒的程序时,病毒就有可能停留在内存当中,这就是你说的内存带毒。在这个时候,病毒就有可能感染其他文件。文件是存储在磁盘上的,是不会因断电而消失的。

Docker守护进程在异常断电后卡在 activating 状态,并且内存占用在无限增加。

首先,查看 docker 版本和 docker info 信息

版本还算比较新,查看 docker 日志:

日志中存在明显的异常堆栈打印,分析可知,启动过程中走到 Loading containers: start. 之后卡住,然后打印 fatal error: runtime: out of memory ,也就是内存爆了。根据堆栈信息,可以看出异常的调用路径如下:

拉取对应版本的代码,根据上述调用过程,找到指定的代码位置:

可以看出,这段是读取 boltdb 数据库(用于缓存网络配置),从之前了解看,这个数据库在异常断电时很容易损坏,所以怀疑是数据库损坏了,导致此处的遍历读取超出了预期的循环次数,而每次循环都会创建变量,分配内存,最终被内核 OOM 。

在 docker 社区查找相关 issue [1] [2],发现确实存在 boltdb 数据库损坏的现象,不过最终报错的现象不太一样。最后,在 docker 社区也提了个 issue [3],社区反馈也是怀疑 boltdb 数据库损坏,并建议可以把 local-kv.db 文件删除再重启来恢复。

个人觉得,上面报错的地方可以优化一下,对 db 文件做一次检查,如果检查到异常,提前抛异常,而不是不停地吃内存(由于异常的环境被破坏了,这个想法需要等复现后再考虑优化)。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9979964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存