Come faccio a sapere se il mio server Windows si sta scambiando?


29

Sto utilizzando Process Explorer per monitorare il mio server Windows mentre ricostruisce alcuni dati. È principalmente un processo ad alta intensità di CPU, ma voglio assicurarmi che non si cambi. Come posso sapere se utilizza Process Explorer? La mia ipotesi iniziale è nella finestra Informazioni di sistema, è Delta di scrittura file di paging. Sì? No? Sono un idiota?

* La schermata non è del server ... solo un esempio.

testo alternativo http://www.malwareinfo.org/bootcamp/img/ProcessExplorer2.jpg

Risposte:


30

"Pagine di input / sec è il contatore da guardare, ma non dovresti preoccuparti di" scambiare "poiché Windows non utilizza il file di paging come * nixes.

Per prima cosa devi capire che le pagine di Windows non escono. Citerò la parte pertinente del post sul blog di Eric Lipperts (leggermente modificato) poiché non posso dirlo meglio:

"La RAM può essere vista semplicemente come un'ottimizzazione delle prestazioni. L'accesso ai dati nella RAM, dove le informazioni sono archiviate in campi elettrici che si propagano vicino alla velocità della luce, è molto più veloce dell'accesso ai dati su disco, dove le informazioni sono archiviate in enormi, pesanti molecole di metalli ferrosi

Il sistema operativo tiene traccia delle pagine di archiviazione da cui si accede più frequentemente ai processi e ne esegue una copia nella RAM, per aumentare la velocità. Quando un processo accede a un puntatore corrispondente a una pagina che non è attualmente memorizzata nella cache nella RAM, il sistema operativo esegue un "errore di pagina", esce sul disco e crea una copia della pagina dal disco alla RAM, facendo il presupposto ragionevole che presto accederà nuovamente.

Il sistema operativo è anche molto intelligente sulla condivisione di risorse di sola lettura. Se due processi caricano entrambi la stessa pagina di codice dalla stessa DLL, il sistema operativo può condividere la cache RAM tra i due processi. Dato che presumibilmente il codice non verrà modificato da nessuno dei due processi, è perfettamente sensato salvare la pagina duplicata di RAM condividendola.

Ma anche con una condivisione intelligente, alla fine questo sistema di cache sta per esaurire la RAM. Quando ciò accade, il sistema operativo fa un'ipotesi su quali pagine avranno meno probabilità di accedere di nuovo presto, le scrive sul disco se sono state modificate e libera quella RAM per leggere in qualcosa che ha maggiori probabilità di accedere di nuovo presto.

Quando il sistema operativo indovina in modo errato o, più probabilmente, quando semplicemente non c'è abbastanza RAM per archiviare tutte le pagine a cui si accede frequentemente in tutti i processi in esecuzione, la macchina inizia a "bloccarsi". Il sistema operativo passa tutto il suo tempo a scrivere e leggere la costosa memoria del disco, il disco gira costantemente e non si ottiene alcun lavoro.

Questo significa anche che "esaurire la RAM" raramente provoca un errore "memoria insufficiente". Invece di un errore, si ottengono prestazioni scadenti perché il costo totale del fatto che l'archiviazione si trova effettivamente sul disco diventa improvvisamente rilevante.

Un altro modo di vedere questo è che la quantità totale di memoria virtuale consumata dal programma non è estremamente rilevante per le sue prestazioni. Ciò che è rilevante non è la quantità totale di memoria virtuale consumata, ma piuttosto (1) quanta parte di tale memoria non è condivisa con altri processi, (2) quanto è grande il "working set" delle pagine di uso comune e ( 3) se i gruppi di lavoro di tutti i processi attivi sono più grandi della RAM disponibile.

Ormai dovrebbe essere chiaro il motivo per cui gli errori di "memoria insufficiente" di solito non hanno nulla a che fare con quanta memoria fisica hai, o anche con quanta memoria è disponibile. Si tratta quasi sempre dello spazio degli indirizzi, che su Windows a 32 bit è relativamente piccolo e facilmente frammentato. "

Alcuni punti aggiuntivi:

  1. le dll e i file di programma sono sempre solo paginati in entrata, mai in uscita poiché sono già su disco (e di solito le prime pagine vengono liberate quando il RAM fisico si sta esaurendo)
  2. è molto più probabile che tu abbia esaurito le voci della tabella di pagine libere o abbia una memoria fortemente compromessa rispetto a qualsiasi altro problema di memoria (oltre alle scarse prestazioni generali come già menzionato
  3. anche se non si esegue alcun file di paging, è comunque possibile ottenere errori di paging
  4. in generale, guardare alla memoria impegnata è più indicativo di come un processo utilizza la memoria

per un quadro completo di come funziona la gestione della memoria in Windows

Il gestore di memoria virtuale in Windows NT

se pensi di avere un problema di memoria, suggerirei prima di guardare questa presentazione sulla risoluzione dei problemi della memoria di Windows

Ecco una grande spiegazione del perché a volte si ottiene "memoria insufficiente" quando non si è grazie alla frammentazione della memoria:

Vedi anche Spingendo i limiti di Windows: memoria fisica

Altro su memoria virtuale, frammentazione e perdite di memoria e WOW64

RAM, memoria virtuale, file di paging e tutto il resto (supporto microsoft)

Aggiornare:

Windows 10 fa qualcosa di leggermente diverso con la memoria e, nel tempo, vedrai un processo chiamato "Sistema e memoria compressa". Windows 10 aggiunge un "archivio di compressione" all'elenco di paging. Questo ram è la memoria USER di proprietà del sistema (in genere il sistema aveva solo la memoria del kernel). Questa memoria è compressa in posizione per una riduzione media di circa il 30%. Ciò consente di archiviare più pagine in memoria (per quelli di voi che fanno matematica con il 70% di spazio in più). Nota che se la memoria ha ancora pressione, le pagine dell'archivio di compressione (spazio di processo del sistema in modalità utente) possono essere posizionate sul file modificato elenco (compresso) che può quindi essere scritto nel file di paging fisico. Il sistema vedrà che sono dallo spazio della modalità utente di sistema e compressi e non proverà a rimetterli nel negozio. Quindi sui sistemi Windows 10 può sembrare che il sistema stia inalando ram ma in realtà sta solo cercando di essere più efficiente nell'uso di ram. Gli utenti Mac utilizzano una funzionalità simile dal 2013 e le versioni più recenti del kernel Linux utilizzano una versione di compressione della memoria. Questo metodo di conservazione della memoria non è solo migliore, ma già comune tra gli altri sistemi operativi.


6

Sì, i delta di paging ti darebbero un'indicazione in tempo reale di quanto il server sta eseguendo il paging (o "scambiando"), ma solo in quel momento. Per osservarlo più da vicino e per visualizzare una vista storica, suggerirei di utilizzare Performance Monitor ( perfmon.exe ) per tracciare o registrare quei delta (e qualsiasi altro contatore di prestazioni di interesse che possa aiutare a correlare eventi o attività specifici con picchi in attività di paging).


5

Performance Monitor (perfmon) è il tuo amico qui. Stai cercando errori di pagina dura (ovvero, errori di pagina quando la pagina di memoria necessaria per soddisfare la richiesta deve essere letta dal disco), quindi il monitoraggio degli errori di pagina sia hard sia soft non è ottimale.

Guarda il contatore "Inserimento pagine / sec" nell'oggetto "Memoria" usando perfmon per avere un'idea di quanti errori di pagina si verificano.


0

Una buona regola empirica è che se la tua commissione di commit è superiore alla tua memoria fisica, stai sicuramente impaginando qualcosa , ma se la tua app utilizza un singolo buffer di dati fisso che viene sempre tenuto in uso, generalmente non verrà impaginato fuori a tutti. È possibile che si verifichi un certo ritardo all'avvio mentre un'altra memoria viene cercata per fare spazio per questo.


3
mh: Non sono sicuro di essere d'accordo con la tua regola empirica. Se il costo di commit è superiore alla memoria fisica, ciò significa semplicemente che a un certo punto è stato eseguito il paging di qualcosa, ma il sistema non sta necessariamente eseguendo il paging di nulla. Qualcosa verrà impaginato solo quando si verifica un errore di pagina. Altrimenti concordo sul fatto che l'uso di un singolo buffer di dati fissi sarebbe il migliore, ma penso che probabilmente ci stiamo muovendo nel regno di stackoverflow.com
Jessica McKinnon,

Mio male, avrei dovuto dire "qualcosa è stato scambiato in passato e anche le future richieste di memoria richiederanno lo scambio".
Maximus Minimus,

Questo non è necessariamente vero che un'applicazione può solo bloccare le pagine in memoria di avere quel privilegio OS.
Jim B,
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.