Výpis stavu desktop heapu ve Windows

26.01.2015

Desktop heap je vyhrazená pamět sloužící pro ukládání objektů session souvisejících s GUI (okna, menu atd..). Více např. zde nebo UTFG. Velikost desktop heapu je uměle omezena (bez ohledu na velikost RAM) a to následovně (platí pro Windows Server 2008 R2 64bit):

Interaktivních úloh obvykle na produkčním serveru moc neběží, důležité jsou ty neinteraktivní - tedy služby běžící pod nějakým uživatelem. Taková služba může pod sebou spouštět stovky procesů a každý z nich si z desktop heapu o velikosti 768kB kousek uzme. Pod velkou záteží tak může dojít k situaci, kdy pamět pro desktop dojde. Důsledkem jsou pády nově spouštěných procesů a celkově podivnému chování.

Zvětšení desktop heapu pro neinteraktivní úlohy

Postup popsán zde. Ve zkratce:

Výpis stavu využití desktop heapu

Bohužel ve Windows není jednoduchý nástroj na zjištění velikosti alokované paměti desktop heapu. Takže je nutné provést následující postup. Na serveru je potřeba mít přístup na weby do Internetu (80 a 443) - při instalaci se budou stahovat debug symboly. Poté je možné přístup zaříznout.

V souboru dskheap.txt (v podadresáři se snapshotem) je pak procentuální využití desktop heapu pro jednotlivé sessions.

0: kd> !dskheap
*** ERROR: Module load completed but symbols could not be loaded for LiveKdD.SYS
  Winstation\Desktop		Heap Size(KB)	Used Rate(%)
------------------------------------------------------------
  WinSta0\Default		   20480		 0%
  WinSta0\Disconnect		      96		 6%
  WinSta0\Winlogon		     192		 3%
  Service-0x0-3e7$\Default	    3072		 0%
  Service-0x0-3e4$\Default	    3072		 0%
  Service-0x0-3e5$\Default	    3072		 0%
  Service-0x0-2cfce$\Default	    3072		10%
  Service-0x0-13ac4f$\Default	    3072		 5%
------------------------------------------------------
 		Total Desktop: (   36128 KB -   8 desktops)
 		Session ID:  0
============================================================ 
v detailu:
  Winstation @fffffa82d3a83420: (Service-0x0-2cfce$) SessionID:  0
  Desktop    @fffffa82d3a832b0: (Default) 

  Desktop Heap Size:	 3145728 (0x  300000) Bytes
  Committed:		  344064 (0x   54000) Bytes
  UnCommitted:		 2801664 (0x  2ac000) Bytes
  Allocated:		  324576 (0x   4f3e0) Bytes
  Total Freed		   19488 (0x    4c20) Bytes
  Unused:		 2821152 (0x  2b0c20) Bytes
  Used Rate:			 (        10)%