Пятница, 13 июля 2012 10:21

Ошибка "A desktop heap allocation failed " Event ID 243

Оцените материал
(4 голосов)

Обнаружил на сервере под 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 и более поздних системах этот параметр не применяется, поскольку пространство сеансового представления увеличивается по мере необходимости.

Я очень надеюсь, моя статья помогла Вам! Просьба поделиться ссылкой с друзьями:


Комментарии  

0 # Капитан улитка 09.10.2014 13:20
Спасибо вам за статью - очень помогло! Именно выделение памяти было ошибкой на сервере и отключало необходимую службу и не давало ее запустить снова. Данные манипуляции устранили ошибку.
Ответить

Добавить комментарий