今天就跟大家聊聊有關(guān)Windows桌面堆棧耗盡該怎么辦,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)建站長(zhǎng)期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為峰峰礦企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、成都做網(wǎng)站,峰峰礦網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
在系統(tǒng)上的每個(gè)桌面對(duì)象都有與之相關(guān)聯(lián)的桌面堆棧。桌面對(duì)象使用堆來(lái)存儲(chǔ)菜單、 掛鉤、 字符串,和窗口。系統(tǒng)將從系統(tǒng)范圍內(nèi)的 48 MB 緩沖區(qū)分配桌面堆。除了桌面的堆打印機(jī)和字體驅(qū)動(dòng)程序也使用該緩沖區(qū)。
桌面機(jī)將與窗口站相關(guān)聯(lián)。窗口站可包含零個(gè)或多個(gè)桌面。桌面堆分配為與窗口站的桌面的大小可以更改以下注冊(cè)表值中。
注意Microsoft 不建議使用 / 3gb 開(kāi)關(guān)。在 boot.ini 文件中指定了 / 3gb 開(kāi)關(guān)。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
此注冊(cè)表值的默認(rèn)數(shù)據(jù)看起來(lái)類(lèi)似于以下 (所有內(nèi)容均在一行上):
%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
后面的數(shù)字值"SharedSection ="控件如何桌面堆分配。這些 SharedSection 值指定以千字節(jié)為單位)。沒(méi)有與交互式和非交互式窗口站的桌面的單獨(dú)設(shè)置。
注意如果修改了注冊(cè)表中的 SharedSection值,則系統(tǒng)必須重新啟動(dòng)之前所做的更改生效。
重要此分區(qū)、 方法,或任務(wù)包含告訴您如何修改注冊(cè)表的步驟。但是,如果注冊(cè)表修改不當(dāng)可能會(huì)出現(xiàn)嚴(yán)重問(wèn)題。因此,請(qǐng)確保您仔細(xì)按照這些步驟。附加的保護(hù)注冊(cè)表之前先備份您對(duì)其進(jìn)行修改。然后,您可以在出現(xiàn)問(wèn)題時(shí)還原注冊(cè)表。有關(guān)如何備份和還原注冊(cè)表的詳細(xì)信息,請(qǐng)單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫(kù)中相應(yīng)的文章:
322756 (http://support.microsoft.com/kb/322756/ ) 如何備份和還原在 Windows 注冊(cè)表
第一個(gè) SharedSection 值 (1024) 是到所有桌面公共共享的堆大小。這包括持有句柄窗口、 菜單、 圖標(biāo)、 游標(biāo),和等) 和共享的系統(tǒng)設(shè)置全局句柄表。是不可能您將需要更改此值。
第二個(gè) SharedSection 值 (3072) 是為與"交互式"窗口站 WinSta0 相關(guān)聯(lián)的每個(gè)桌面桌面堆的大小。用戶對(duì)象 (如掛接、 菜單、 字符串,和窗口會(huì)消耗此桌面堆中的內(nèi)存。是不可能將需要更改此第二個(gè) SharedSection 值。
在 $ 交互式窗口工作站中創(chuàng)建的每個(gè)桌面使用默認(rèn)的 3072 KB 桌面堆。默認(rèn)狀態(tài)下,有三個(gè)臺(tái)式計(jì)算機(jī)由系統(tǒng)創(chuàng)建 Winsta0 中:
Winlogon
默認(rèn)的應(yīng)用程序的桌面將由其"Winsta0\default"指定 STARTUPINFO.lpDesktop結(jié)構(gòu)成員中的所有進(jìn)程使用的"默認(rèn)"。空 lpDesktop 結(jié)構(gòu)成員時(shí)窗口站和桌面上繼承自父進(jìn)程。在本地系統(tǒng)帳戶下選中 允許服務(wù)與桌面交互]啟動(dòng)選項(xiàng)執(zhí)行的所有服務(wù)將都使用"Winsta0\Default"。所有這些進(jìn)程將共享相同的桌面堆與"默認(rèn)"應(yīng)用程序桌面相關(guān)聯(lián)。
顯示屏幕保護(hù)程序時(shí),在交互式窗口站 (WinSta0) 創(chuàng)建 屏幕保護(hù)程序-的屏幕保護(hù)程序桌面。
第三個(gè) SharedSection 值 (512) 是為"非交互式"窗口站與相關(guān)聯(lián)的每個(gè)桌面桌面堆的大小。如果不存在此值為非交互式窗口站桌面堆的大小將與為交互式窗口站 (第二個(gè) SharedSection 值) 指定的大小相同。
如果僅有兩個(gè) SharedSection 值,您可以添加"、 512"作為第三個(gè)值以指定在非交互式窗口工作站中創(chuàng)建的臺(tái)式機(jī)桌面堆的大小。
每一個(gè)用戶帳戶下執(zhí)行的服務(wù)進(jìn)程將在創(chuàng)建服務(wù)控制管理器 (SCM) 的非交互式窗口站收到一個(gè)新的桌面。因此,用戶帳戶下執(zhí)行每個(gè)服務(wù)將消耗桌面堆在第三個(gè) SharedSection 該值中指定的千字節(jié)數(shù)。在 $ 允許服務(wù)與桌面交互進(jìn)行與本地系統(tǒng)帳戶下執(zhí)行的所有服務(wù) 不 選定的共享的非交互式服務(wù)窗口站 (服務(wù)-0x0 3e7 $) 中的"默認(rèn)"桌面桌面堆。
在交互式和非交互式窗口站中使用的總桌面堆必須適合 48 MB 系統(tǒng)范圍內(nèi)緩沖區(qū)。
遞減第二個(gè)或第三個(gè) SharedSection 值將增加可創(chuàng)建在相應(yīng)的窗口站的桌面機(jī)的數(shù)量。較小的值將限制掛鉤、 菜單、 字符串,和可以創(chuàng)建一個(gè)桌面中的窗口的數(shù)。另一方面,增加第二個(gè)或第三個(gè) SharedSection 值將減小桌面可創(chuàng)建的數(shù),但它會(huì)增加的掛鉤、 菜單、 字符串,和可以創(chuàng)建一個(gè)桌面中的窗口數(shù)。
由于 SCM 在非交互式窗口站的用戶帳戶下運(yùn)行的每個(gè)服務(wù)進(jìn)程中創(chuàng)建一個(gè)新的桌面,較大的桌面值的第三個(gè) SharedSection 值將減少在系統(tǒng)可以成功地運(yùn)行的用戶帳戶服務(wù)的數(shù)目??梢灾付榈诙€(gè)或第三個(gè) SharedSection 值的最小值是 128。 若要使用較小的值的任何嘗試將默認(rèn)為 128。
桌面堆由 User32.dll 分配一個(gè)過(guò)程時(shí)需要的用戶對(duì)象。如果不依賴(lài)于 User32.dll 應(yīng)用程序,它將不消耗桌面堆。
注意在 Windows Server 2003,當(dāng)滿足下列條件之一為真時(shí)在系統(tǒng)事件日志中記錄特定的事件:
如果桌面堆已滿,會(huì)記錄以下事件:
事件類(lèi)型: 警告
事件源: Win32k
事件類(lèi)別: 無(wú)
事件 ID: 243
日期:Date
時(shí)間:Time
用戶: 不適用
計(jì)算機(jī):ServerName
描述: A 桌面堆棧分配失敗。
在這種情況下增加桌面堆的大小。
如果總的桌面堆棧將成為系統(tǒng)范圍的緩沖區(qū)大小,會(huì)記錄以下事件:
事件類(lèi)型: 警告
事件源: Win32k
事件類(lèi)別: 無(wú)
事件 ID: 244
日期:Date
時(shí)間:Time
用戶: 不適用
計(jì)算機(jī):ServerName
描述: 無(wú)法創(chuàng)建桌面堆耗盡由于的桌面。
在這種情況下減小桌面的堆大小。
在 Windows Server 2003,系統(tǒng)范圍的緩沖區(qū)是 20 MB,當(dāng)滿足下列條件之一為真時(shí):
您是在終端服務(wù)環(huán)境中。
在 Boot.ini 文件中指定了 / 3gb 開(kāi)關(guān)。
補(bǔ)充:桌面堆棧耗盡的原因有兩種一種是沒(méi)有安全的調(diào)用系統(tǒng)動(dòng)態(tài)鏈接庫(kù)User32.dll和kernel32.dll,另外一種就是桌面堆棧真的被耗盡了。通過(guò)分析,之所以導(dǎo)致此問(wèn)題是由于長(zhǎng)期使用遠(yuǎn)程桌面Terminal Services 導(dǎo)致緩沖區(qū)只有20MB而沒(méi)有滿足交互式進(jìn)程調(diào)用需要的48MB所導(dǎo)致。
附錯(cuò)誤信息: Warning: 243:A desktop heap allocation failed.
看完上述內(nèi)容,你們對(duì)Windows桌面堆棧耗盡該怎么辦有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。