Abbiamo un servizio Windows a 32 bit che perde memoria - Viene emessa l'eccezione OutOfMemory. È eseguibile .net 4.0 in esecuzione su Windows Server 2003. Durante il debug dei file di dettagli di arresto anomalo con WinDbg, vedo che la maggior parte della memoria è effettivamente riservata e non impegnata. La memoria riservata può causare un'eccezione di memoria insufficiente
Come si può vedere da WinDbg screenshot, v'è 2,5 GB di utilizzo della memoria non classificati, e la memoria maggior parte di esso 2.1 Gb è in realtà riservato (MEM_RESERVE). Ho esperienza nel debug di discariche, ma questo scenario è qualcosa di nuovo per me. MEM_COMMIT è smettere OK - 564,270 Mb, è riuscito dimensioni di heap è circa 82 Mb
Ho anche controllato cumuli native per vedere se ci sono grandi quantità di dati conservati, ma non riusciva a trovare nulla di sospetto neanche lì
Quindi la mia domanda è - è possibile che MEM_RESERVED potrebbe comportare eccezioni OOM? In tal caso, come posso eseguire il debug, vedere perché/quanto è stata riservata una grande quantità di memoria? Dove altro guarderesti per trovare quale potrebbe essere il problema?
Se sono richieste altre informazioni, si prega di richiederlo e aggiornerò il mio post.
grazie per la risposta, sai per caso come posso vedere cosa riserva questa enorme memoria in WinDbg? – Michael
Supponendo che la memoria sia utilizzata dall'oggetto gestito, è possibile controllarli usando '! Dumpheap' e'! Do'. Tuttavia, dato che l'output di '! Eeheap' mostra che l'heap gestito è piccolo, suppongo che qualcos'altro abbia riservato questa memoria. –
Potresti specificare cosa altro può riservare la memoria? Sono confuso perché mi aspetterei che "qualcosa" sia su heap gestito, o qualche risorsa nativa su heap nativi - nessuno dei due punta a nessuna cosa sospetta. Cos'altro potrebbe riservare la memoria? Sarei più che felice di controllarlo subito. – Michael