Perché l'utilizzo totale della memoria segnalato da Task Manager di Windows è molto più elevato della somma dell'utilizzo della memoria di tutti i processi? [duplicare]


98

Task Manager mostra il mio utilizzo di memoria totale al 90% del mio totale di 6 GB, ma nessun singolo processo utilizza più di 250 MB di RAM e la somma dell'utilizzo della RAM di tutti i processi in esecuzione è inferiore a 2 GB. Ho provato:

  • Guardando i numeri nella colonna "Memoria" nella scheda "Processi" di Task Manager di Windows 8.
  • Esaminando le colonne "Working set", "Private Working Set", "Shared Working Set" e "Commit Size" nella scheda "Dettagli" di Task Manager.
  • Esaminare colonne simili relative alla memoria in Process Explorer.
  • Ho provato a eseguire Sysinternals RAMMap, ma mentre sto avendo la crisi di memoria insufficiente, si blocca all'avvio. Una volta risolto il problema, RAMMap funziona normalmente, ma a quel punto è troppo tardi.

Tutti mostrano una quantità piuttosto piccola di memoria utilizzata.

Ci sono molte persone che chiedono varianti di questa domanda, con varie versioni di Windows, su Internet. Alcuni riescono a risolvere i loro problemi di memoria insufficiente, spesso reinstallando il software; a volte reinstallando Windows da zero. Sto cercando una risposta alle domande generali che tutti condividono e che sembrano non avere mai risposta altrove:

  1. Perché la memoria totale utilizzata è molto più elevata della memoria utilizzata da tutti i processi elencati, indipendentemente da come provo a contarli?
  2. Come può Windows "sapere" che la memoria viene utilizzata senza sapere quale programma la sta usando?
  3. Quali processi potrebbero utilizzare la memoria ma non essere visualizzati nell'elenco?
  4. Esiste un software là fuori che può fornire ulteriori informazioni sulla memoria utilizzata?

Dettagli specifici per il mio problema: dall'aggiornamento a Windows 8.1, il problema si verifica non appena eseguo l'accesso. Ho esaurito la memoria non appena ho eseguito un programma. Ho notato in Process Explorer che erano in esecuzione diverse istanze di iexplore.exe, apparentemente avviate automaticamente. Un'istanza particolare utilizzava solo pochi MB di RAM, ma mostrava centinaia di milioni di errori di pagina. Per un capriccio, ho interrotto quel processo specifico e l'utilizzo della memoria è immediatamente diminuito del 70%.

Portando a una domanda specifica:

  • Come potrebbe uccidere un processo che presumibilmente ha usato solo pochi MB per liberare diversi GB?

E una domanda bonus (presumibilmente difficile):

  • A meno di reinstallare Windows, come potrei evitare di doverlo fare ogni volta che riavvio il mio computer?

3
anche la memoria del kernel conta nell'uso. Pubblica foto di RAMMAp: blogs.technet.com/b/askperf/archive/2010/08/13/…
magicandre1981

2
Penso che la domanda dovrebbe essere intitolata "Perché sto esaurendo la memoria".
surfasb,

A questa domanda è impossibile rispondere senza dettagli. Elencare i programmi installati. O meglio ancora, un dump dei processi in esecuzione da Performance Monitor.
surfasb,

1
Stai davvero spegnendo / riavviando completamente il tuo computer o usi lo spegnimento ibrido (predefinito in Windows 8)? Dopo il passaggio a Windows 8 ho avuto un problema simile. Presumo che un driver abbia preso sempre più della mia RAM fisica e non l'abbia restituito, anche dopo aver spento e riacceso il computer. In poche settimane si accumulò a diversi gigabyte. Quindi ora ogni pochi giorni clicco su "riavvia" o tengo premuto MAIUSC mentre clicco su "Spegni" per spegnere effettivamente il PC.
Robert,

2
Nel mio caso era la memoria "Driver Locked", riservata da Hyper-V perché aveva abilitato "Dynamic Memory". Ho dovuto interrompere tutte le macchine virtuali, disabilitare l'impostazione e riavviarle. Grazie per il suggerimento RAMMap.
Dagelf

Risposte:


7

A proposito, dovresti cercare di non usare il termine "memoria". Crea molta confusione. Se intendi memoria fisica, pronuncia "memoria fisica" o "RAM". Se vuoi dire memoria virtuale, dillo. Se vuoi dire negozio di supporto, dillo.

Perché la memoria totale utilizzata è molto più elevata della memoria utilizzata da tutti i processi elencati, indipendentemente da come provo a contarli?

Perché il sistema operativo non spreca memoria fisica (RAM) a meno che non abbia scelta.

Come può Windows "sapere" che la memoria viene utilizzata senza sapere quale programma la sta usando?

Perché nessun programma lo sta usando. Si consideri, ad esempio, la memoria che contiene il codice per un programma appena terminato. Nessun programma lo sta utilizzando. Ma quella memoria viene utilizzata, poiché non è libera e contiene dati che potrebbero essere utili (nel caso in cui il programma venga eseguito di nuovo).

Quali processi potrebbero utilizzare memoria ma ora vengono visualizzati nell'elenco?

Non è utilizzato dai processi.

Esiste un software là fuori che può fornire ulteriori informazioni sulla memoria utilizzata?

RAMMap può farlo.

Esistono solo due possibilità, la RAM può essere utilizzata o può essere sprecata. Ovviamente, il primo è migliore. Ogni memoria libera viene sprecata per sempre: una macchina da 4 GB non può usare 2 GB oggi per utilizzare 6 GB domani. Se stai pensando "Lo voglio gratis ora in modo da poterlo utilizzare in seguito", dimenticalo. Puoi usarlo ora e usarlo in seguito.

Come potrebbe uccidere un processo che presumibilmente ha usato solo pochi MB per liberare diversi GB?

Stai esaurendo l'archivio di backup, non la memoria fisica. Disponi di memoria fisica libera ma archivio di backup insufficiente per il sistema operativo per continuare ad allocare memoria virtuale che potrebbe richiedere il backup.

Il processo utilizzava solo pochi MB di memoria fisica, ma il sistema operativo potrebbe aver dovuto riservare diversi GB di memoria virtuale di backup. Ad esempio, supponiamo che un processo crei una mappatura della memoria privata scrivibile di un file da 2 GB. Il sistema operativo deve riservare 2 GB di memoria virtuale di backup per il processo, poiché potrebbe scrivere su ogni singolo byte di tale mapping. Inoltre, potrebbe non scrivere mai a nessuno di essi. Ecco perché è necessario un file di paging di buone dimensioni.

I moderni sistemi operativi scrivono molti assegni (promettente backing store) che non verranno mai incassati (richiedono RAM). Non puoi continuare a scrivere assegni (promettente negozio di supporto) anche se hai un sacco di soldi in banca (RAM gratuita) se hai già scritto un sacco di grandi assegni che potrebbero o non potrebbero essere incassati (promesso tanto negozio di supporto come hai). I file di paging aggiungono l'archivio di backup, consentendo al sistema operativo di continuare a scrivere controlli.


14
PS: sto usando la parola "memoria" non perché non conosco la differenza tra RAM e VM, ma perché il mio computer mi sta solo dicendo che è esaurito "memoria" senza darmi alcuna informazione su cosa effettivamente si intende. (Suppongo significhi RAM, per i motivi che ho specificato nel commento precedente, ma non ne sono certo.) Preferirei usare il vocabolario reale (che posso cercare se necessario) piuttosto che elaborate metafore finanziarie :)
Josh,

91
-1 perché dopo aver letto la risposta e tutti i commenti, non è ancora chiaro perché la memoria utilizzata totale sia molto più alta della memoria utilizzata da tutti i processi elencati.
Bennett McElwee,

6
Quella terminologia, in cui la memoria è "usata" anche se nessun programma la sta usando, è abbastanza diversa dal normale significato di parole come "usata" e "libera" - forse è la terminologia di Microsoft, non la tua. Ad ogni modo, supponiamo ad esempio che il 50% della RAM sia attualmente utilizzato dai programmi in esecuzione e che il 25% non sia utilizzato da alcun programma in esecuzione ma contenga dati che potrebbero essere utili in futuro ma che possono anche essere scartati. Sommando quelli insieme e visualizzando "Memoria: 75%" non vengono fornite informazioni utili all'utente. Penso che sia da lì che nasce la confusione diffusa.
Bennett McElwee,

2
@BennettMcElwee Non esiste un buon modo per ridurre l'utilizzo della memoria a un numero semplice, ma gli utenti insistono su questo. Ciò mette gli sviluppatori in una posizione scomoda: possono fornire un numero che non è sempre utile o non fornire alcun numero. La maggior parte degli sviluppatori di sistemi operativi e GUI sceglie la prima opzione: fornisce un numero che crea molta confusione. Se la tua domanda è "sarebbe più RAM per far funzionare meglio il mio sistema", la risposta è: è molto, molto difficile da dire, anche per gli esperti.
David Schwartz,

2
@DavidSchwartz La tua risposta non spiega questo, ma semplicemente lo afferma. Potete fornire qualche link per sostenere quel reclamo specifico? Sto interpretando "Memoria fisica XX%" per indicare che il XX% della RAM installata fisicamente è attualmente in uso e non è disponibile per altri processi. Credo di essere convalidato dal fatto che oltre il 90% del sistema diventa soggetto a blocchi e quando le applicazioni tentano di allocare memoria oltre il 100%, si bloccano completamente. Nella mia esperienza, questo non è il regime standard in cui operano la maggior parte dei sistemi.
John Neuhaus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.