2014-03-11 02:46:08 +0000 2014-03-11 02:46:08 +0000
104
104

Perché l'uso totale della memoria riportato dal Task Manager di Windows è molto più alto della somma dell'uso della memoria di tutti i processi?

Task Manager mostra il mio utilizzo totale della memoria al 90% dei miei 6 GB totali, ma nessun singolo processo sta utilizzando 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” del Task Manager di Windows 8.
  • Guardando le colonne “Working Set”, “Private Working Set”, “Shared Working Set” e “Commit Size” nella scheda “Details” di Task Manager.
  • Guardando colonne simili relative alla memoria in Process Explorer.
  • Ho provato a eseguire Sysinternals RAMMap, ma mentre sto avendo la crisi della memoria bassa, si blocca al lancio. 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 pongono varianti di questa domanda, con varie versioni di Windows, in tutto l'Internet. Alcuni di loro riescono a risolvere i loro problemi di bassa memoria, spesso reinstallando software; a volte reinstallando windows da zero. Sto cercando una risposta alle domande generali che tutti condividono, e che sembrano non trovare mai risposta altrove:

  1. Perché la memoria totale usata è molto più alta della memoria usata da tutti i processi elencati, non importa come cerco di contarli?
  2. Come può windows “sapere” che la memoria è usata senza sapere quale programma la sta usando?
  3. Quali processi potrebbero utilizzare la memoria ma non comparire nell'elenco?
  4. C'è qualche software là fuori che può dare più informazioni sulla memoria usata?

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

che porta a una domanda specifica:

  • Come poteva l'uccisione di un processo che presumibilmente utilizzava solo pochi MB liberare diversi GB?

E una domanda bonus (presumibilmente difficile):

  • A parte reinstallare Windows, come potrei evitare di dover affrontare tutto questo ogni volta che riavvio il computer?

Risposte (1)

6
6
6
2014-03-11 05:23:42 +0000

A proposito, dovreste cercare di non usare il termine “memoria”. Crea molta confusione. Se intendete memoria fisica, dite “memoria fisica”, o “RAM”. Se intendete memoria virtuale, ditelo. Se intendete il backing store, ditelo.

Perché la memoria totale usata è molto più alta della memoria usata da tutti i processi elencati, non importa come provo a contarli?

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

Come potrebbe windows “sapere” che la memoria è usata senza sapere quale programma la sta usando?

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

Quali processi potrebbero usare la memoria, ma ora appaiono nella lista?

Non è usata da processi.

C'è qualche software là fuori che può dare più informazioni sulla memoria usata? RAMMap può farlo.

Ci sono solo due possibilità, la RAM può essere usata o può essere sprecata. Ovviamente, la prima è meglio. Ogni memoria libera è sprecata per sempre – una macchina da 4GB non può usare 2GB oggi per usarne 6GB domani. Se state pensando “la voglio libera ora così posso usarla dopo”, dimenticatevelo. Puoi usarlo ora e usarlo dopo.

Come potrebbe l'uccisione di un processo che presumibilmente utilizzava solo pochi MB liberare diversi GB?

Siete a corto di memoria di supporto, non di memoria fisica. Avete un sacco di memoria fisica libera ma un backing store insufficiente perché il sistema operativo continui ad allocare la memoria virtuale che potrebbe richiedere il backing.

Il processo stava usando solo pochi MB di memoria fisica, ma il sistema operativo potrebbe aver dovuto riservargli diversi GB di memoria virtuale di supporto. Per esempio, supponiamo che un processo crei una mappatura di memoria privata scrivibile di un file di 2 GB. Il sistema operativo deve riservare 2 GB di memoria virtuale supportata per il processo, perché potrebbe scrivere su ogni singolo byte di quella mappatura. Inoltre, potrebbe non scriverne mai nessuno. Questo è il motivo per cui avete bisogno di un file di paginazione di buone dimensioni.

I sistemi operativi moderni scrivono un sacco di assegni (promettendo il backing store) che non saranno mai incassati (richiedono RAM). Non puoi continuare a scrivere assegni (promettendo un magazzino di supporto) anche se hai molti soldi in banca (RAM libera) se hai già scritto un mucchio di grossi assegni che potrebbero o non potrebbero essere incassati (promettendo tanto magazzino di supporto quanto ne hai). I file di paging aggiungono il backing store, permettendo al sistema operativo di continuare a scrivere assegni.

Domande correlate

8
19
13
6
11