<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Supporto Tecnico Enterprise : Pool Memory</title><link>http://blogs.technet.com/itasupport/archive/tags/Pool+Memory/default.aspx</link><description>Tags: Pool Memory</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Memoria Paged e NonPaged Pool – Come identificare un memory leak</title><link>http://blogs.technet.com/itasupport/archive/2009/05/11/memoria-paged-e-nonpaged-pool-come-identificare-un-memory-leak.aspx</link><pubDate>Mon, 11 May 2009 02:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3236896</guid><dc:creator>itentblg</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/itasupport/comments/3236896.aspx</comments><wfw:commentRss>http://blogs.technet.com/itasupport/commentrss.aspx?PostID=3236896</wfw:commentRss><description>&lt;p&gt;In questo post vedremo come identificare le problematiche legate ad un esaurimento di due specifiche &lt;a href="http://blogs.technet.com/itasupport/archive/2008/12/15/kernel-memory-overview.aspx" target="_blank"&gt;risorse Kernel&lt;/a&gt;: Paged Pool e NonPaged Pool.     &lt;br /&gt;Vi consiglio di leggere il post di &lt;a href="http://blogs.technet.com/itasupport/pages/fabio-lavatelli.aspx" target="_blank"&gt;Fabio Lavatelli&lt;/a&gt; per una visione esaustiva della memoria: &lt;b&gt;&lt;a href="http://blogs.technet.com/itasupport/archive/2008/12/15/kernel-memory-overview.aspx" target="_blank"&gt;Kernel Memory Overview&lt;/a&gt;.&lt;/b&gt;&lt;/p&gt;  &lt;h3&gt;Memoria Paged e NonPaged Pool&lt;/h3&gt;  &lt;p&gt;All’avvio del computer, il &lt;strong&gt;Memory Manager&lt;/strong&gt; crea dinamicamente due memorie pool di dimensione fissa per tutto il periodo in cui il Sistema Operativo rimane attivo: queste due pool sono conosciute come &lt;b&gt;Paged Pool&lt;/b&gt; e &lt;b&gt;NonPaged Pool&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;Le dimensioni di queste pool, determinate all'avvio, dipendono da una &lt;strong&gt;serie di fattori&lt;/strong&gt;: alcuni di questi possono essere modificati attraverso specifiche chiavi di registry, mentre altri dipendono dall’hardware specifico del computer, come la quantità di &lt;strong&gt;memoria fisica&lt;/strong&gt;.&lt;/p&gt;  &lt;div&gt;Entrambe le pool possono raggiungere un &lt;strong&gt;valore massimo teorico&lt;/strong&gt; dipendente dall’architettura del sistema operativo:&lt;/div&gt;  &lt;table border="0" cellspacing="0" cellpadding="0" width="577" align="center"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td width="96"&gt;         &lt;p align="center"&gt;&lt;b&gt;Tipo Pool&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td width="284"&gt;         &lt;p align="center"&gt;&lt;b&gt;Sistemi a 32-Bit (x86)&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td width="195"&gt;         &lt;p align="center"&gt;&lt;b&gt;Sistemi a 64-Bit (x64)&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="97"&gt;         &lt;p align="center"&gt;NonPaged&lt;/p&gt;       &lt;/td&gt;        &lt;td width="284"&gt;         &lt;p align="left"&gt;256 MB (Windows 2000, XP e 2003)            &lt;br /&gt;128 MB (Con opzione /3GB abilitata al boot)&lt;/p&gt;       &lt;/td&gt;        &lt;td width="195"&gt;         &lt;p align="center"&gt;128 GB&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="98"&gt;         &lt;p align="center"&gt;Paged&lt;/p&gt;       &lt;/td&gt;        &lt;td width="284"&gt;         &lt;p align="left"&gt;491,875 MB (Windows 2000 e Windows XP) 650,000 MB (Windows Server 2003)&lt;/p&gt;       &lt;/td&gt;        &lt;td width="195"&gt;         &lt;p align="center"&gt;128GB&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Nel caso sia abilitata l’&lt;strong&gt;opzione /3GB&lt;/strong&gt; nel file boot.ini la dimensione massima teorica della &lt;strong&gt;NonPaged Pool è dimezzata&lt;/strong&gt;. Questo è dovuto alla gestione nel Sistema Operativo della &lt;a href="http://blogs.technet.com/itasupport/archive/2008/12/15/kernel-memory-overview.aspx" target="_blank"&gt;memoria virtuale&lt;/a&gt;: sono dedicati 3 Gigabyte alla parte applicativa e solo 1 Gigabyte alla parte kernel.&lt;/p&gt;  &lt;p&gt;I Sistemi Operativi a 64 bit (x64) presentano limiti di memoria virtuale superiori di diversi ordini di grandezza rispetto a sistemi a 32 bit (x86), perciò un'eventuale saturazione della memoria disponibile avverrebbe in tempi più elevati.&lt;/p&gt;  &lt;p&gt;La sostanziale differenza tra le due tipologie di pool, come evidenzia il nome, è che la Paged Pool può essere &lt;strong&gt;paginata su disco&lt;/strong&gt;, mentre la NonPaged Pool è sempre &lt;strong&gt;residente in memoria&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;I &lt;strong&gt;driver&lt;/strong&gt; utilizzano la NonPaged Pool per tutte quelle operazioni eseguite ad un &lt;strong&gt;Interrupt Request Level&lt;/strong&gt; (IRQL) troppo elevato per ammettere paginazione.     &lt;br /&gt;L'IRQL definisce la priorità a cui il processore sta operando, maggiori informazioni sono disponibili nel seguente articolo: &lt;a href="http://www.microsoft.com/whdc/driver/kernel/IRQL.mspx" target="_blank"&gt;Scheduling, Thread Context, and IRQL&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Eventi SRV 2019 e 2020&lt;/h3&gt;  &lt;p&gt;Nel caso in cui un driver abbia un funzionamento anomalo, potrebbe allocare memoria Pool senza mai rilasciarla arrivando alla saturazione di tutto lo spazio a disposizione: questo fenomeno è chiamato &lt;strong&gt;memory leak&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;In questo tipo di scenario, generalmente troviamo nel Log degli Eventi di Sistema i seguenti 2 eventi specifici.    &lt;br /&gt;L'&lt;strong&gt;evento 2019&lt;/strong&gt; si riferisce all'esaurimento della &lt;strong&gt;NonPaged pool&lt;/strong&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;Type: Error        &lt;br /&gt;Date: &amp;lt;date&amp;gt;         &lt;br /&gt;Time: &amp;lt;time&amp;gt;         &lt;br /&gt;Event ID: &lt;strong&gt;&lt;font color="#ff0000"&gt;2019&lt;/font&gt;&lt;/strong&gt;         &lt;br /&gt;Source: Srv         &lt;br /&gt;User: N/A         &lt;br /&gt;Computer: &amp;lt;ComputerName&amp;gt;         &lt;br /&gt;Details: The server was unable to allocate from the &lt;font color="#ff0000"&gt;&lt;strong&gt;system&lt;/strong&gt; &lt;strong&gt;NonPaged pool&lt;/strong&gt;&lt;/font&gt; because the pool was empty. &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Mentre l'&lt;strong&gt;evento 2020&lt;/strong&gt; riguarda l'esaurimento della &lt;strong&gt;Paged Pool&lt;/strong&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;Type: Error        &lt;br /&gt;Date: &amp;lt;date&amp;gt;         &lt;br /&gt;Time: &amp;lt;time&amp;gt;         &lt;br /&gt;Event ID: &lt;strong&gt;&lt;font color="#ff0000"&gt;2020&lt;/font&gt;&lt;/strong&gt;         &lt;br /&gt;Source: Srv         &lt;br /&gt;User: N/A         &lt;br /&gt;Computer: &amp;lt;ComputerName&amp;gt;         &lt;br /&gt;Details: The server was unable to allocate from the &lt;strong&gt;&lt;font color="#ff0000"&gt;system Paged pool&lt;/font&gt;&lt;/strong&gt; because the pool was empty&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In alcuni scenari specifici di memory leak, gli eventi 2019 e 2020 non sono presenti nel Registro Eventi, ma sono loggati molti errori &lt;strong&gt;333 - &lt;/strong&gt;&lt;strong&gt;Application Popup&lt;/strong&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;Type: Error        &lt;br /&gt;Date: &amp;lt;date&amp;gt;         &lt;br /&gt;Time: &amp;lt;time&amp;gt;         &lt;br /&gt;Event ID: &lt;strong&gt;&lt;font color="#ff0000"&gt;333&lt;/font&gt;&lt;/strong&gt;         &lt;br /&gt;Source: Application Popup         &lt;br /&gt;User: N/A         &lt;br /&gt;Computer: &amp;lt;ComputerName&amp;gt;         &lt;br /&gt;Details: An &lt;strong&gt;&lt;font color="#ff0000"&gt;I/O operation initiated by the Registry failed unrecoverably&lt;/font&gt;&lt;/strong&gt;. The Registry could not read in, or write out, or flush, one of the files that contain the system's image of the Registry&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Maggiori informazioni riguardo questo scenario sono spiegati nel post &lt;a href="http://blogs.technet.com/itasupport/archive/2008/11/17/analizzare-l-evento-application-popup-333.aspx" target="_blank"&gt;Analizzare l’evento “Application Popup 333”&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Analizzare un Memory Leak&lt;/h3&gt;  &lt;p&gt;Il &lt;strong&gt;comportamento&lt;/strong&gt; del Sistema Operativo in presenza di un memory leak è imprevedibile: si possono registrare &lt;strong&gt;hang&lt;/strong&gt;, &lt;strong&gt;crash&lt;/strong&gt; di applicazioni o &lt;strong&gt;BlueScreen&lt;/strong&gt; (bugcheck 0x0000041 MUST_SUCCEED_POOL_EMPTY).&lt;/p&gt;  &lt;div&gt;Il &lt;strong&gt;performance monitor&lt;/strong&gt; permette di verificare lo stato della Memoria Pool con i seguenti &lt;strong&gt;counter&lt;/strong&gt;:&lt;/div&gt;  &lt;div align="center"&gt;   &lt;table border="0" cellspacing="0" cellpadding="0" width="630" align="center"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="bottom" width="209"&gt;           &lt;p align="center"&gt;&lt;b&gt;Counter&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="419"&gt;           &lt;p align="center"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="bottom" width="209"&gt;           &lt;p align="left"&gt;Memory\Paged Pool Bytes&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom" width="419"&gt;           &lt;p align="left"&gt;Indica il numero di byte allocati nella Paged Pool di sistema&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="209"&gt;           &lt;p align="left"&gt;Memory\Non Paged Pool Bytes&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="419"&gt;           &lt;p align="left"&gt;Indica il numero di byte allocati nella NonPaged Pool di sistema&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/div&gt;  &lt;p&gt;Il grafico seguente illustra un andamento tipo di un &lt;strong&gt;memory leak&lt;/strong&gt; relativo alla NonPaged Pool:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/MemoriaPagedPooleNonPagedPoolComeidentif_84DF/clip_image002_2.gif"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/MemoriaPagedPooleNonPagedPoolComeidentif_84DF/clip_image002_thumb.gif" width="563" height="394" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;FIG 1 - Andamento tipico di un memory leak relativo alla NonPaged Pool.&lt;/p&gt;  &lt;p&gt;La NonPaged Pool allocata, indicata in MegaByte, è al di sotto del valore massimo teorico di 256 MB, ma presenta un &lt;strong&gt;andamento crescente&lt;/strong&gt; che indica un tipico caso in cui un driver non stia rilasciando la memoria allocata.&lt;/p&gt;  &lt;p&gt;La &lt;strong&gt;crescita&lt;/strong&gt; può essere variabile in funzione del tempo, e per questo la &lt;strong&gt;finestra temporale&lt;/strong&gt; di monitoring dovrà essere modulata proporzionalmente alla rapidità del leak.&lt;/p&gt;  &lt;p&gt;Il grafico seguente illustra un altro andamento tipo di &lt;strong&gt;saturazione di memoria&lt;/strong&gt; relativo alla NonPaged Pool:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/MemoriaPagedPooleNonPagedPoolComeidentif_84DF/clip_image002%5B5%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="clip_image002[5]" border="0" alt="clip_image002[5]" src="http://blogs.technet.com/blogfiles/itasupport/WindowsLiveWriter/MemoriaPagedPooleNonPagedPoolComeidentif_84DF/clip_image002%5B5%5D_thumb.gif" width="564" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p align="center"&gt;FIG 2 - Andamento variabile relativo alla NonPaged Pool.&lt;/p&gt;  &lt;p&gt;L’andamento non risulta crescente, ma può indicare ugualmente la presenza di problemi dovuti al raggiungimento del limite massimo di memoria Pool disponibile. In questa situazione non abbiamo un vero e proprio memory leak, ma una saturazione della NonPaged Pool che richiede un &lt;strong&gt;tuning manuale &lt;/strong&gt;di specifiche chiavi di &lt;strong&gt;registry&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;I due andamenti riportati valgono per &lt;strong&gt;entrambe le tipologie di memoria Pool&lt;/strong&gt; anche se i limiti più stringenti e che presentano più problemi sono relativi alla memoria NonPaged Pool.&lt;/p&gt;  &lt;p&gt;Nei successivi post vedremo nel dettaglio come approfondire e risolvere:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Problemi di memory leak &lt;/li&gt;    &lt;li&gt;Problemi di saturazione della memoria &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/itasupport/pages/mattia-tocco.aspx"&gt;Mattia Tocco&lt;/a&gt;     &lt;br /&gt;Senior Support Engineer     &lt;br /&gt;Microsoft Enterprise Platform Support&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3236896" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/itasupport/archive/tags/Mattia+Tocco/default.aspx">Mattia Tocco</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.technet.com/itasupport/archive/tags/NT+Kernel+Architecture/default.aspx">NT Kernel Architecture</category><category domain="http://blogs.technet.com/itasupport/archive/tags/Pool+Memory/default.aspx">Pool Memory</category></item></channel></rss>