我在服务器上运行着大量泄漏的应用程序,这些应用程序在超过 100 天的正常运行时间内已经交换了大约 60gb 的垃圾。当我第一次用完交换空间(32gb)时,我开始插入 U 盘和swapon
它们。这大概有用了一个月,但我的 U 盘和 USB 端口正在慢慢用完……我得出的结论是,可能所有重要的东西都已交换到第一个交换空间(我认为),而优先级较低的交换空间中剩余的东西可能只是泄漏,所以……如果我拔掉这些 U 盘,格式化它们,然后再格式化,会怎么样swapon
?这更有可能使这些应用程序或整个操作系统崩溃吗?
答案1
除非您设法通过此方法触发内核错误,否则系统不应该崩溃。可能存在一些潜在问题,因为拔掉活动的交换设备很可能不是常见的测试场景。
如果您的系统没有崩溃,您的应用程序在尝试访问任何不再可用的换出页面时将一个接一个地死亡。
终止并重新启动泄漏的应用程序要安全得多,因为它们退出时所有泄漏的内存都将被释放。
答案2
所以我测试了一下。拔掉 U 盘后,系统立即陷入恐慌。即使实际上有一些备用 RAM,因此在拔出设备时不会主动访问交换区,但仍然会导致系统崩溃。
系统日志没有记录任何内容,就像文件系统崩溃的情况一样。可能最终是由我使用的 btrfs 引起的,因为使用 btrfs 的系统在耗尽 RAM(和交换)时也会遇到恐慌(oom killer 未激活,只是系统崩溃并产生相同的结果 - 没有日志记录)