Как Windows справляется с процессной памятью или исчерпанием ресурсов?

516
misha256

На днях я работал на 32-битном ПК с Windows 7, на котором работало несколько приложений, включая Firefox.

Со временем я продолжал открывать новые вкладки в Firefox, пока внезапно окно Firefox не начало мерцать. С этого момента большая часть графического интерфейса Firefox стала черной и отказалась перекрашивать. После попытки закрыть некоторые вкладки вслепую процесс Firefox полностью потерпел крах. Все остальные приложения, похоже, продолжают работать просто отлично.

Я предполагаю (поправьте меня, если я ошибаюсь), что процесс Firefox исчерпал свое право на 2 ГБ виртуальной памяти или какой-либо другой ресурс. Что подводит меня к ключевым вопросам:

  1. Может ли истощение памяти / ресурсов в одном процессе дестабилизировать другие процессы или даже само ядро?

  2. Как современные Windows справляются с этим сценарием? Насколько он устойчив в условиях высокого давления?

Меня беспокоит то, что, если другие процессы или службы ядра будут скомпрометированы, это может привести к поломке системы (например, повреждению файла / диска / реестра).

0

1 ответ на вопрос

1
DavidPostill

How does Windows deal with process memory or resource exhaustion?

How a program behaves under "stress conditions" depends on how the particular program has been written (what privileges it has, does it contain bugs, etc) and this behaviour will determine how the rest of the system is affected when something "goes wrong".

It is possible that data can be lost. It is possible for the system to crash with a BSOD or just be unable to write data because of a delayed write failed error.


Pushing the Limits of Windows

The blog post series by Mark Russinovich (starting at Pushing the Limits of Windows: Physical Memory) goes into this topic in some detail.

In particular, in Pushing the Limits of Windows: Paged and Nonpaged Pool, he illustrates the effect of running a test program:

If you want to witness first hand how a system behaves when pool runs low, use the Notmyfault tool. It has options that cause it to leak either nonpaged or paged pool in the increment that you specify. You can change the leak size while it’s leaking if you want to change the rate of the leak and Notmyfault frees all the leaked memory when you exit it

On one test system, he said about the results:

On one test system, I eventually saw this error message indicating that data had potentially been lost. I hope you never see this dialog on a real system!

enter image description here


Further Reading

Windows Internals, 6th edition by Mark Russinovich contains a lot more information on how Windows works under the hood.

Вау, хорошие ссылки, очень богатая информация. Читая статьи, я подозреваю, что мой случай * истощение объектов GDI или USER * (подсказки - черное окно и графический интерфейс, не перерисовываемый). Я не думаю, что вкладки веб-контента в Firefox исчерпали бы ресурсы ядра (выгружаемые / невыгружаемые пулы)? misha256 9 лет назад 0
@ misha256 Это зависит от того, что происходит во вкладках. Например, плохо написанный плагин может быть утечкой ресурсов GDI или просто ошибкой в ​​Firefox. Сколько вкладок вам удалось открыть? Какой тип контента отображался на вкладках? DavidPostill 9 лет назад 0
Предположительно, 20-25 вкладок, каждая вкладка содержала бы достаточно богатый контент, включая Flash анимацию / видео (все эти Flash-объявления тоже не помогают). misha256 9 лет назад 0
Так что это может быть ошибка в плагине Flash. DavidPostill 9 лет назад 0
Ошибки во Flash? Почему меня это не удивляет. misha256 9 лет назад 0
Кстати, вы получили отчет о сбое Firefox? Это обычно дает довольно хорошее представление о том, где и почему он упал. DavidPostill 9 лет назад 0
Вы очень помогли. Особенно справочник * Russinovich *, который приводит к целой куче отличных утилит - с чем можно поиграть на виртуальной машине :-) misha256 9 лет назад 0
* вы получили отчет о сбое в Firefox? * Не в то время ... глупый я ... но подождите, в превосходном средстве просмотра событий Windows 7 есть запись: * Неправильное имя приложения: plugin-container.exe, Неисправное имя модуля: mozalloc .dll *. Handy! misha256 9 лет назад 0
about: support предоставит вам доступ к прошлым отчетам о сбоях (нажмите «Все отчеты о сбоях»);) DavidPostill 9 лет назад 1
Последний комментарий, я только что нашел это, что может объяснить, почему мои другие процессы продолжали работать нормально, даже когда Firefox обанкротился: http://blogs.msdn.com/b/oldnewthing/archive/2007/07/18/3926581 .aspx misha256 9 лет назад 1