Администраторам, вероятно, знакомы проблемы истощения кучи рабочего стола (например, выдача сообщения «недостаточно памяти» или отказ запуска приложения) и известно по собственному опыту, как сложно их решать. Во-первых, необходимо установить, что конкретный симптом связан с истощением кучи рабочего стола.
Автор выражает благодарность Мэтью Джастису, инженеру по разработке Microsoft, который помог в подготовке статьи
Администраторам, вероятно, знакомы проблемы истощения кучи рабочего стола (например, выдача сообщения «недостаточно памяти» или отказ запуска приложения) и известно по собственному опыту, как сложно их решать. Во-первых, необходимо установить, что конкретный симптом связан с истощением кучи рабочего стола. Во-вторых, требуется определить, какой процесс или служба потребляют максимальный объем ресурсов и какой параметр реестра надо изменить, чтобы исправить ситуацию. Я покажу, как быстро установить факт истощения кучи рабочего стола системы. Список общих признаков истощения кучи рабочего стола приведен ниже. Затем я расскажу об инструментах и оптимальных методах, которые помогут решить проблему полностью или частично, прежде чем придется обращаться в службу технической поддержки.
Внутренняя организация Windows
Прежде чем приступать к диагностике истощения кучи рабочего стола, необходимо ознакомиться с основными особенностями внутренней организации Windows, чтобы понять причины возникновения этой проблемы. У Windows 2000 и более старых систем есть реконфигурируемая область памяти режима ядра, называемая сеансовым пространством. Сеансовое пространство представляет собой изолированную программную среду окон и рабочих столов отдельного пользователя.
Необходимо также знать, что каждый сеанс (например, сеанс 0, сеанс 1) включает рабочие станции, определяющие границы зоны безопасности рабочих столов. Термин «рабочий стол» заставляет думать об интерактивной рабочей среде, которую видит каждый пользователь при регистрации в системе Windows, однако не каждый рабочий стол непосредственно взаимодействует с пользователем. Каждая рабочая станция содержит объекты рабочего стола, а каждый сеанс имеет одну интерактивную рабочую станцию под названием WinSta0, которую пользователь видит при регистрации в системе.
Другое объяснение концепции древовидной организации рабочего стола: каждый порожденный процесс Win32 принадлежит рабочему столу; каждый рабочий стол принадлежит рабочей станции. В рамках отдельного сеанса с пользователем взаимодействует лишь одна рабочая станция, тогда как все прочие — нет. Каждая рабочая станция принадлежит сеансу. На рисунке схематично представлено дерево рабочих столов типовой системы. На этом рисунке приведены два сеанса: сеанс 0 и сеанс 1. Сеанс 0 относится к выполнению служб и представлению консоли (до Windows Vista). Все прочие — сеанс 1 или сеанс 2 — представляют службы терминалов или быстрое переключение пользователей.
Что такое куча рабочего стола?
Каждому объекту рабочего стола необходима память для сохранения объектов пользовательского интерфейса, в частности окон и меню. Эта память называется кучей рабочего стола. Когда приложению требуется объект графического интерфейса, из библиотеки user32.dll вызываются функции выделения памяти из кучи рабочего стола. Каждому рабочему столу отведена одна куча, ресурсы для которой выделяются из пространства сеансового представления, которое является подмножеством сеансового пространства.
Процесс выделения памяти для сохранения окон и меню протекает незаметно, но существует два главных сценария возникновения отказов. Во-первых, ресурсы пространства сеансового представления могут истощиться, что не позволит создавать новые рабочие столы. Такое может произойти, если несколько служб выполняются под нелокальной, определяемой системой учетной записью пользователя, и для каждого экземпляра службы создается новый рабочий стол. Во-вторых, существующие кучи рабочего стола могут быть полностью исчерпаны, и процессы, порождаемые на этом рабочем столе, ощутят нехватку памяти. Второй сценарий является наиболее распространенным и может быть вызван выполнением нескольких экземпляров одного и того же процесса (например, запуском нескольких экземпляров Internet Explorer) или единичным процессом, интенсивно использующим объекты графического интерфейса.
Средства диагностики
Обсудим методы, позволяющие значительно упростить диагностику истощения кучи рабочего стола. Утилита Desktop Heap Monitor 8.1 (Dheapmon), доступная для загрузки по ссылке tinyurl.com/Dheapmon, является удобным инструментом для Windows XP или Windows Server 2003 (Dheapmon не работает с Vista и Windows Server 2008). Эта программа выдает удобное меню с указанием общего числа рабочих столов, сеансов и рабочих станций. Как показано на экране 1, выходными данными этой программы являются выраженные в процентах показатели использования памяти каждого рабочего стола.
Наиболее важные выходные показатели Dheapmon, находящиеся в столбце Used Rate (%), позволяют выявить рабочие столы, ресурсы которых полностью исчерпаны (на 90% и более). Другой отслеживаемый показатель — значение Total Desktop, указывающее на общий объем памяти, выделенной для всех рабочих столов. Когда это значение приближается к общему размеру пространства сеансового представления, система Windows не может создавать новые рабочие столы в сеансе. В этом случае может понадобиться изменить соответствующее значение в реестре, чтобы увеличить используемый по умолчанию размер пространства сеансового представления. В таблице показаны используемые по умолчанию размеры пространства сеансового представления для Windows 2000, XP и Windows 2003.
Прежде чем менять значение параметра в реестре, необходимо попытаться определить процесс, потребляющий максимальный объем ресурсов, чтобы узнать, какие условия в системе вызывают истощение памяти кучи рабочего стола. Один из наиболее простых способов определить основного потребителя ресурсов — запустить диспетчер задач, на вкладке «Процессы» выбрать «Вид», «Выбрать столбцы» и поставить отметку флажка «Объекты USER». Щелчком в верхней части столбца меняем порядок сортировки на нисходящий, что позволяет сразу увидеть приложение или службу, потребляющую максимальный объем памяти кучи рабочего стола. Определение главного потребителя ресурсов важно, поскольку может указать на проблему, связанную с этой службой или приложением и требующую дальнейшего анализа, тогда как простое изменение настроек параметров реестра лишь замаскирует проблему. Данные в столбце «Объекты USER» диспетчера задач помогут также определить приложение или службу, потребляющую максимальный объем памяти рабочего стола, в системе Vista и Server 2008.
Параметры реестра, определяющие размер пространства сеансового представления
Для XP, Windows 2003 и Windows 2000 размер пространства сеансового представления можно задать с помощью параметра реестра SessionViewSize (REG_DWORD). Значение параметра указывается в мегабайтах. Заметим, что в Vista и более поздних системах этот параметр не применяется, поскольку пространство сеансового представления увеличивается по мере необходимости. Значения, приведенные в таблице, относятся к 32-разрядным системам x86, не загружаемым с использованием переключателя/3GB. Чтобы актуализировать измененное значение параметра реестра, нужно перезагрузить систему. Параметр располагается в разделе HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerMemory Management.
Если требуется изменить размер конкретной кучи рабочего стола (когда Used Rate (%) близко к 90%), существует два возможных способа в зависимости от наличия одного или двух условий. Первое условие возникает, когда данные, возвращаемые утилитой Dheapmon, выявляют истощение кучи рабочего стола, принадлежащей интерактивной рабочей станции (WinSta0) (кроме Disconnect или Winlogon). В этом случае размер кучи рабочего стола можно задать с использованием параметра SharedSection (вторая величина (3072) записи SharedSection= в листинге реестра на экране 2). Далее мы остановимся на значениях этого параметра реестра более подробно.
Второе условие возникает, когда выходные данные Dheapmon указывают на истощение кучи рабочего стола, принадлежащей неинтерактивной рабочей станции. В этом случае также можно задать размер кучи рабочего стола с использованием параметра SharedSection (третье значение (512) записи SharedSection= на экране 2). Размер каждой кучи рабочего стола определяется в подразделе реестра HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerSubSystemsWindows. Используемые по умолчанию значения этого параметра реестра выглядят примерно так же, как на экране 2 (они находятся на одной строке в системном реестре).
Как уже упоминалось, числовые значения параметра SharedSection= определяют распределение ресурсов кучи рабочего стола. Эти значения указываются в килобайтах.
-
Первое значение SharedSection (1024) — общий для всех рабочих столов размер кучи. Эта память не относится к выделению рабочего стола из кучи, поэтому данное значение не следует менять, решая проблемы истощения памяти рабочего стола.
-
Второе значение SharedSection (3072) — размер кучи рабочего стола для каждого рабочего стола, ассоциированного с интерактивной рабочей станцией (WinSta0), кроме рабочих столов Disconnect и Winlogon.
-
Третье значение SharedSection (512) — размер кучи рабочего стола для каждого рабочего стола, ассоциированного с неинтерактивной рабочей станцией (обычно — службой). Если это значение отсутствует, размер кучи рабочего стола для неинтерактивных рабочих станций будет аналогичен размеру, указанному для интерактивных рабочих станций (второе значение SharedSection).
Изменения в Vista SP1 и Server 2008
В 32-разрядных версиях Vista SP1 и Server 2008 сеансовое пространство представляет собой динамически распределяемое адресное пространство ядра. Как уже упоминалось, параметр реестра SessionViewSize больше не используется. Это значительное улучшение и одна из причин, почему вам, возможно, не приходилось замечать истощения кучи рабочего стола, работая с Vista или Windows Server 2008, по сравнению с более ранними версиями Windows. Кроме того, второе значение параметра SharedSection, т. е. размер кучи интерактивного рабочего стола, изменено на 12 288 Кбайт
Возможные симтомы истощения кучи рабочего стола
-
отказ запуска приложения (0xc0000142);
-
отказ запуска назначенных заданий;
-
незаметная остановка процессов;
-
элементы пользовательского интерфейса не прорисовываются как следует;
-
событие 243 (ошибка выделения рабочего стола из кучи) в системном журнале.
Обнаружил на сервере под Windows server 2003 в Event Viewer ошибку A desktop heap allocation failed, Event ID 243. Ошибка связанна с кучей рабочего стола.
Возможные симптомы истощения кучи рабочего стола:
— отказ запуска приложения (0xc0000142);
— отказ запуска назначенных заданий;
— незаметная остановка процессов;
— элементы пользовательского интерфейса не прорисовываются как следует;
— событие 243 (ошибка выделения рабочего стола из кучи) в системном журнале.
Что такое куча рабочего стола?
Каждому объекту рабочего стола необходима память для сохранения объектов пользовательского интерфейса, в частности окон и меню. Эта память называется кучей рабочего стола. Когда приложению требуется объект графического интерфейса, из библиотеки user32.dll вызываются функции выделения памяти из кучи рабочего стола. Каждому рабочему столу отведена одна куча, ресурсы для которой выделяются из пространства сеансового представления, которое является подмножеством сеансового пространства.
Процесс выделения памяти для сохранения окон и меню протекает незаметно, но существует два главных сценария возникновения отказов. Во-первых, ресурсы пространства сеансового представления могут истощиться, что не позволит создавать новые рабочие столы. Такое может произойти, если несколько служб выполняются под нелокальной, определяемой системой учетной записью пользователя, и для каждого экземпляра службы создается новый рабочий стол. Во-вторых, существующие кучи рабочего стола могут быть полностью исчерпаны, и процессы, порождаемые на этом рабочем столе, ощутят нехватку памяти. Второй сценарий является наиболее распространенным и может быть вызван выполнением нескольких экземпляров одного и того же процесса (например, запуском нескольких экземпляров Internet Explorer) или единичным процессом, интенсивно использующим объекты графического интерфейса.
Первый вариант решение проблемы с ошибкой A desktop heap allocation failed:
Для конфигурирования Desktop heap используется переменная реестра «Windows» (тип REG_EXPAND_SZ), которая находится HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems
Содержимое этой переменной подобно следующему:
%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16
Нас интересует параметр SharedSection, который контролирует выделение Desktop heap. Все размеры указаны в Кб.
Первое значение 1024 — это shared heap size, общий для всех десктопов.
Второе значение 3072 — это размер Desktop heap для каждого десктопа связанного с интерактивной window station.
И наконец третье значение 512 — это размер Desktop heap для каждого десктопа связанного с не интерактивной window station, если это значение не указано явно, то оно равно второму значению.
Для устранения ошибки вам необходимо увеличить размер Desktop heap для десктопа связанного с не интерактивной window station и установить его в значение 1024 и увеличить размер для каждого десктопа связанного с window station до 4096
Таки образом вы должны изменитьь значение SharedSection=1024,4096,1024.
Второй вариант решение проблемы с ошибкой A desktop heap allocation failed.
Для XP, Windows 2003 и Windows 2000 размер пространства сеансового представления можно задать с помощью параметра реестра SessionViewSize (REG_DWORD). Параметр располагается в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management. Значение параметра указывается в мегабайтах. В параметре SessionViewSize я указал 60, в последствии этого оказалась мало (ошибка вновь возникла ) увеличил до 90- ошибка пропала. Заметим, что в Vista/Server 2008 и более поздних системах этот параметр не применяется, поскольку пространство сеансового представления увеличивается по мере необходимости.
Я очень надеюсь, моя статья помогла Вам! Просьба поделиться ссылкой с друзьями:
Коллекции > Курьёзы > Компьютерные
➔ Ошибка выделения рабочего стола из кучи ➔
Павел: это, наверное, случается, когда пользователь сильно захламляет рабочий стол, и на нём образуется куча мусора. 😊
Добавьте свой комментарий, почитайте уже добавленные комментарии или войдите, чтобы подписаться/отписаться.
Имя:
Результат операции:
Навигация
Категория:
Поиск:
Загрузка…
Ошибка выделения рабочего стола из кучи (Win 2003 sp2) — что за….
☑
0
Admin_Net_1C
05.06.08
✎
06:46
Подскажите плиз, в чем может быть проблема: каждое утро перегружаю комп по расписанию, а через 20 мин. (перед стартом обработки 1С) в журнале регистрации появляется ошибка «Ошибка выделения рабочего стола из кучи», после этого 1С не запускается а в журнале появляется ошибка «1cv7s.exe — Ошибка приложения : Инструкция по адресу «0x75540a24» обратилась к памяти по адресу «0x2603c540». Память не может быть «read»
ОС: Win 2003 sp2, SQL Server 2000 sp4, 1С v7.7 (25 движок)
1
logdog
05.06.08
✎
08:13
проверить планки…
перестать издеваться над сервером (каждодневными ребутами)…
2
Ангел- Хоронитель
05.06.08
✎
09:35
«Ошибка выделения рабочего стола из кучи» — это дословно? НЕ ВЕРЮ!
3
eklmn
гуру
05.06.08
✎
09:38
«каждое утро перегружаю комп» — ужос
4
smaharbA
05.06.08
✎
09:47
«куча» — этож таковое было в сях…
5
ValeriTim
05.06.08
✎
10:00
(0) Oooo !!! А код этой ошибки в журнале ?
6
Admin_Net_1C
05.06.08
✎
14:05
(1) Это не сервак, а прокси. Перезагружаю из-за того, что крутиться пару специфических софтин, которые переодически «подглючивают», помогает только перезагрузка
(2),(5) Код (ID): 243, Категория: Отсутствует, Описание: Ошибка выделения рабочего стола из кучи.
Дополнительные сведения можно найти в центре справки и поддержки, в «http://go.microsoft.com/fwlink/events.asp».
На чтение5 мин
Опубликовано
Обновлено
Ошибка «Error allocating memory» в операционной системе Windows 10 x64 может возникать по разным причинам, но чаще всего она связана с недостатком оперативной памяти или ошибками в работе системных компонентов. В этой статье мы рассмотрим несколько способов исправить данную ошибку.
Первым шагом в решении проблемы является проверка доступной оперативной памяти. Убедитесь, что компьютер имеет достаточно свободной памяти для работы приложений. Если памяти не хватает, попробуйте закрыть ненужные программы или процессы, чтобы освободить дополнительное место.
Если проблема не решается путем освобождения памяти, следующим шагом можно попробовать перезагрузить компьютер. В некоторых случаях перезагрузка может помочь сбросить системные компоненты и исправить ошибку. Попробуйте выполнить полную перезагрузку, выключите компьютер и подождите несколько минут, затем включите его снова.
Если перезагрузка не помогла, возможно, проблема связана с поврежденными системными файлами. В этом случае можно воспользоваться встроенным инструментом «Сканирование системных файлов», который поможет выявить и исправить поврежденные файлы. Для запуска этого инструмента откройте командную строку от имени администратора и выполните команду «sfc /scannow».
Примечание: Во время сканирования системных файлов может потребоваться подключение к интернету для загрузки недостающих или поврежденных файлов.
Если все вышеперечисленные способы не помогли решить проблему, рекомендуется обратиться к специалисту или к сообществу поддержки Windows. Они смогут предложить индивидуальные решения для вашей конкретной ситуации и помочь исправить ошибку «Error allocating memory» в Windows 10 x64.
Причины ошибки «Error allocating memory»
Ошибки типа «Error allocating memory» (Ошибка выделения памяти) могут возникать в операционной системе Windows 10 x64 по разным причинам. Некоторые из наиболее распространенных причин включают:
| 1. Недостаток оперативной памяти | Если системе не хватает оперативной памяти, она может не смочь выполнить операцию выделения памяти, что приведет к ошибке «Error allocating memory». Это может произойти при запуске тяжелых программ или при выполнении множества процессов одновременно. |
| 2. Неправильное использование памяти | Некорректное использование памяти может привести к ошибке «Error allocating memory». Например, если программа пытается выделить память больше, чем это разрешено, или пытается освободить память, которая уже была освобождена. |
| 3. Проблемы с драйверами | Некоторые драйверы могут вызывать ошибку «Error allocating memory», особенно если они не правильно управляют памятью или используют устаревшие методы выделения памяти. Обновление драйверов может помочь исправить эту проблему. |
| 4. Вредоносное ПО | Некоторое вредоносное программное обеспечение может вызывать ошибки выделения памяти в системе. Это может быть связано с попыткой вредоносных программ записать данные в недоступную область памяти или занимать слишком много памяти. |
При возникновении ошибок «Error allocating memory» в Windows 10 x64 существует несколько рекомендаций по их устранению. Они включают в себя проверку запущенных программ и процессов, обновление драйверов, а также проверку наличия вредоносного ПО на компьютере.
Решение 1: Очистка оперативной памяти
Один из способов исправить ошибку «Error allocating memory» в Windows 10 x64 заключается в очистке оперативной памяти компьютера. Возможно, ваша оперативная память перегружена или занята большим количеством программ, что может приводить к ошибкам выделения памяти.
Следуйте этим шагам, чтобы очистить оперативную память:
| Шаг 1: | Нажмите комбинацию клавиш «Ctrl» + «Shift» + «Esc», чтобы открыть диспетчер задач Windows. |
| Шаг 2: | Переключитесь на вкладку «Процессы», чтобы увидеть список всех запущенных процессов. |
| Шаг 3: | Кликните правой кнопкой мыши на процессе, который потребляет большое количество памяти, и выберите «Завершить задачу». |
| Шаг 4: | Повторите шаги 3 для всех процессов, которые потребляют большое количество памяти. |
| Шаг 5: | Перезапустите компьютер, чтобы завершить процессы и освободить оперативную память. |
После выполнения этих шагов попробуйте повторно выполнить действие, которое вызывало ошибку «Error allocating memory». Если проблема сохраняется, попробуйте другие решения, описанные в статье.
Решение 2: Увеличение виртуальной памяти
Если вы столкнулись с ошибкой «Error allocating memory» в Windows 10 x64, проблема может быть вызвана нехваткой виртуальной памяти на вашем компьютере. В этом случае, увеличение размера виртуальной памяти может помочь вам решить проблему.
Чтобы увеличить размер виртуальной памяти, вам необходимо выполнить следующие действия:
- Щелкните правой кнопкой мыши по значку «Мой компьютер» на рабочем столе и выберите «Свойства».
- В открывшемся окне «Свойства системы» выберите вкладку «Дополнительно».
- В разделе «Производительность» нажмите кнопку «Настройки».
- В открывшемся окне «Параметры производительности» выберите вкладку «Дополнительно».
- В разделе «Виртуальная память» нажмите кнопку «Изменить».
- Снимите флажок с опции «Автоматически управлять размером файла подкачки для всех дисков».
- Выберите диск, на котором у вас установлена операционная система, и установите флажок «Размер файла подкачки».
- Введите вручную большее значение для минимального и максимального размера файла подкачки (например, 4000 МБ).
- Нажмите кнопку «Установить».
- Подтвердите изменения, нажав кнопку «ОК».
После выполнения всех этих шагов, перезагрузите компьютер, чтобы изменения вступили в силу. Увеличение виртуальной памяти может помочь устранить ошибку «Error allocating memory» и повысить производительность вашего компьютера.
Решение 3: Обновление драйверов
Часто причиной ошибки «Error allocating memory» может быть устаревший или несовместимый драйвер устройства. В этом случае, обновление драйверов может помочь исправить проблему.
Следуйте инструкциям ниже для обновления драйверов в Windows 10 x64:
- Нажмите клавиши Win + X и выберите пункт «Диспетчер устройств».
- В Диспетчере устройств найдите устройство, которое может вызывать ошибку «Error allocating memory». Это может быть какой-либо драйвер, связанный с оборудованием или системой.
- Щелкните правой кнопкой мыши на устройстве и выберите пункт «Обновить драйвер».
- Выберите опцию «Автоматический поиск обновленного программного обеспечения драйвера».
- Подождите, пока Windows найдет и установит обновленную версию драйвера для выбранного устройства. Если обновление доступно, у вас будет возможность скачать и установить его.
- После завершения установки обновленного драйвера перезагрузите компьютер, чтобы изменения вступили в силу.
Если после обновления драйверов проблема не решена, попробуйте обновить драйверы других устройств в системе. Также рекомендуется проверить официальный сайт производителя вашего компьютера или устройства на наличие более новых версий драйверов.
Обратите внимание, что процесс обновления драйверов может занять некоторое время, и вам может потребоваться подключение к Интернету для скачивания обновлений.
