Di recente abbiamo riscontrato un problema sul nostro server live che ha causato la mancata risposta della nostra app Web. Tutto ciò che ottenevamo erano errori 503 fino al riavvio del server, quindi andava bene. Alla fine l'ho rintracciato in httperr.log e ho trovato molti errori 1_Connections_Refused.
Ulteriori indagini sembravano indicare che avevamo raggiunto il limite del pool non di paging. Da allora abbiamo monitorato la memoria del pool non di paging utilizzando Poolmon.exe e riteniamo di aver identificato il tag che causa il problema.
Tag Type Allocs Frees Diff Bytes Per Alloc
Even Nonp 51,231,806 50,633,533 684,922 32,878,688 48
Se utilizziamo poolmon.exe / g mostra il driver mappato come [<oggetti evento> sconosciuti].
Questo è praticamente di nessun aiuto. Il mio team ha dedicato molto tempo alla ricerca di questo problema e non è stato in grado di trovare un processo per limitarlo a un'applicazione o un servizio specifici. Ho la sensazione che la maggior parte delle persone sembri risolvere il problema uccidendo i processi sulla macchina fino a quando non vedono il reset della memoria non di paging. Questo non è esattamente quello che vuoi vedere quando lavori su una macchina di produzione.
Se apro Task Manager e visualizzo l'elenco dei processi. Vedo MailService.exe con un valore NP Pool di 105 KB, 36 KB in più rispetto al valore del processo elencato per secondo. Dato che in passato abbiamo riscontrato alcuni problemi con il nostro server di posta (che potrebbe essere o meno correlato a questo problema), la mia sensazione è che questo sia il motivo.
Tuttavia, prima di uscire dal riavvio dei servizi, vorrei avere un po 'più di certezza di un semplice "istinto".
Ho anche provato a utilizzare poolmon.exe / c ma questo restituisce sempre l'errore:
unable to load msvcr70.dll/msvcp70.dll
e non crea localtag.txt. Il mio collega ha dovuto scaricare pooltag.txt da Internet perché non riusciamo a capire dove si trova. Non abbiamo installato il debugger win o il DDK win (che posso vedere). Forse l'errore sopra riportato è dato dal fatto che non abbiamo installato nessuno di questi, ma non lo so.
Alla fine ho provato:
C:\windows\system32\driver\findstr /m /l Even *.sys
Ciò ha restituito un elenco abbastanza consistente di file .sys e di nuovo non è stato affatto utile con il problema in questione.
Quindi la mia domanda è questa: c'è qualche altro modo per restringere la causa di questa perdita di memoria?
AGGIORNARE:
Come suggerito di seguito, sto registrando i byte non pagati del pool per l'ultimo giorno o giù di lì per vedere se qualche processo è in trend. Per la maggior parte, tutti i processi sembrano essere abbastanza statici nel loro utilizzo. Due di loro sembrano aver spuntato leggermente. Continuerò a monitorarlo per i prossimi giorni.
Ho anche dimenticato di menzionare prima che nessuno dei processi sembra utilizzare un numero eccessivo di handle.
AGGIORNAMENTO 2:
Ho monitorato questo per le ultime due settimane. Sia il pool di byte non di paging per i singoli processi sia il pool di byte non di paging totale sono rimasti relativamente stabili durante quel periodo. Durante questo periodo Windows è stato aggiornato e il server è stato riavviato, quindi mi chiedo se ciò abbia risolto il problema. Sicuramente non vedo la crescita costante nel pool di byte non di paging ora che ero prima di questo.