Windows 如何处理进程内存或资源耗尽?

Windows 如何处理进程内存或资源耗尽?

有一天,我在一台 Windows 7 32 位 PC 上工作,其中运行着一些应用程序,包括 Firefox。

随着时间的推移,我一直在 Firefox 中打开新标签,直到 Firefox 窗口突然开始闪烁。从那时起,Firefox 的大部分 GUI 都变黑了,无法重新绘制。在尝试盲目关闭一些标签后,Firefox 进程完全崩溃了。所有其他应用程序似乎都继续正常工作。

我假设(如果我错了请纠正我)Firefox 进程耗尽了其 2GB 虚拟内存权限或其他资源。这让我想到了关键问题:

  1. 一个进程中的内存/资源耗尽会破坏其他进程甚至内核本身的稳定性吗?

  2. 现代 Windows 如何处理这种情况?在这种高压条件下,它的稳定性如何?

我担心的是,如果其他进程或内核服务受到损害,可能会导致系统崩溃(例如文件/磁盘/注册表损坏)。

答案1

Windows 如何处理进程内存或资源耗尽?

程序在“压力条件”下的行为取决于特定程序的编写方式(它具有什么权限、是否包含错误等),并且该行为将决定当出现“错误”时系统其余部分会受到怎样的影响。

数据可能会丢失。系统可能会崩溃并出现 BSOD,或者由于错误而无法写入数据delayed write failed


突破 Windows 的极限

Mark Russinovich 的博客文章系列(开始于突破 Windows 的极限:物理内存) 详细讨论了这一主题。

特别是在突破 Windows 的限制:分页池和非分页池他举例说明了运行测试程序的效果:

如果您想亲眼见证池耗尽时系统的行为,请使用 Notmyfault 工具。它具有导致其以您指定的增量泄漏非分页或分页池的选项。如果您想更改泄漏率,您可以在泄漏时更改泄漏大小,并且 Notmyfault 会在您退出时释放所有泄漏的内存

在一个测试系统上,他谈到了结果:

在一个测试系统上,我最终看到此错误消息,表明数据可能已丢失。我希望您永远不会在实际系统中看到此对话框!

在此处输入图片描述


进一步阅读

Windows Internals,第 6 版Mark Russinovich 所著的《Windows 底层工作原理》包含更多详细信息。

相关内容