Cosa sta usando il mio swap (Ubuntu)?


30

Ho un server Ubuntu 8.04 che esegue un database e un sacco di server di applicazioni Java. La sua configurazione e utilizzo della memoria è:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

Ho notato che lo scambio aumenta ogni pomeriggio e viene rilasciato qualche volta durante la notte. La domanda non è la stessa in tutti i giorni e inizia in momenti diversi. Quindi è abbastanza casuale, ad eccezione del confine sfocato "pomeriggio-notte".

Il caricamento su questa macchina varia durante il giorno. È molto basso tra mezzanotte e le 6-7 del mattino, molto più alto (ma stabile) fino alle 6-8 del pomeriggio, per poi scendere gradualmente.

Ora ho le seguenti domande:

  1. Come posso vedere quali processi utilizzano swap?
  2. Perché preferisce scambiare piuttosto che prendere un po 'di memoria dalla cache?

Risposte:


25

I modelli di utilizzo degli swap che descrivi non sembrano sorprendenti. Sono coerenti con alcuni processi in esecuzione permanente con pagine utilizzate raramente. Durante il giorno, a causa dell'alta attività, le pagine utilizzate raramente sono quasi sempre scambiate. Di notte, c'è più spazio per loro nella RAM.

Puoi dare uno sguardo a quanta memoria di vari tipi utilizza ogni processo in topo htop. Nessuno dei due mostra l'utilizzo di swap per impostazione predefinita, ma entrambi possono essere configurati su (in alto: premere fe accendere la SWAPcolonna; htop: premere F2, aggiungere la NSWAPcolonna). È possibile ottenere ulteriori informazioni su un determinato processo con cat /proc/12345/vmstatdove si 12345trova l'ID del processo. Si noti che "quanto swap sta utilizzando un programma" non è completamente ben definito, poiché alcune pagine sono condivise da più processi.

Esistono due tipi principali di concorrenti per la RAM: la memoria di processo (che può essere scambiata) e le cache del disco (che possono essere rilette da un file). Non c'è motivo di dare sempre la priorità alla memoria di processo rispetto alle cache del disco: è meglio scambiare una porzione di memoria di processo utilizzata raramente che continuare a leggere un file in memoria ancora e ancora. Le cifre fornite, con circa la metà (diciamo il 30% -70%) della memoria dedicata alle cache del disco, sono tipiche per i sistemi che hanno una quantità ragionevole di RAM per le attività che dovrebbero svolgere.


6
Non riesco a trovare una NSWAPcolonna (Ubuntu 16.04: /).
jjmontes,

1
@jjmontes È stato rimosso . Non so perché.
Gilles 'SO- smetti di essere malvagio' il

Le FAQ di htop affermano che l'autore non crede che sia possibile segnalare accuratamente l'utilizzo dello swap e che la metrica di top sia imprecisa.
Oliver Evans,

0

Su StackOverflow, c'è già un'ottima risposta alla tua prima domanda ("Quale processo utilizza effettivamente lo swap?").

https://stackoverflow.com/a/7180078/1442301

In breve, strumenti come topo htopnon forniscono informazioni precise sull'uso dello swap. Dovresti immergerti nella /proccartella (nello pseudo file /proc/$PID/smaps) per ottenere informazioni più accurate.

Il post sopra menzionato contiene uno script di shell breve per ottenere queste informazioni in modo piacevole.


0

Con htop v1.01, ho premuto "S" per aggiungere NSWAPcolonna anziché "F2" (come suggerito Gilles), quindi Columns> Available Columns> e F5per aggiungerlo.

inserisci qui la descrizione dell'immagine


Ho htop 2.0.1 e non vedo l'opzione NSWAP :(
Adam

1
@Adam Il manutentore non vuole più mostrare questa colonna a causa di un modo affidabile per ottenere queste informazioni; vedi Perché htop non presenta una colonna SWAP, come top?
Genjo,

0

Senza eseguire il polling e l'analisi dei risultati di strumenti come vmstat, freee top, il posto migliore in cui cercare potrebbe essere il crontab dell'utente root o di altri utenti sul sistema. Se il carico generale sul sistema aumenta in modo affidabile in un determinato momento, è probabile che ci sia un processo in cron che crea la necessità di risorse. Altrimenti puoi sempre creare un'utilità di registrazione a scomparsa del ghetto con l' scriptutilità, che registra semplicemente tutto ciò che va allo STDOUT.

Quindi, se avessi bisogno di fare uno script usa e getta per catturare l'output per un'ispezione successiva, in un terminale scriverei:

script /tmp/free.txt

e poi

while (true); do date; free; sleep 30; done

e in un altro terminale

script /tmp/top.txt

e poi

while (true); do date; top -n 1; sleep 30; done

e poi la mattina dopo, uccidi entrambe le scriptinvocazioni e abbina l'output di topefree

ancora una volta questo è un approccio al ghetto ma sembra che tu abbia bisogno solo di una tantum

ti potrebbe piacere anche leggere la guida di scambio di Ubuntu

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.