GNU/Linux >> Linux Esercitazione >  >> Linux

Determinazione corretta dell'utilizzo della memoria in Linux

Copia/incolla spudoratamente la mia risposta da serverfault proprio l'altro giorno :-)

Il sistema di memoria virtuale di Linux non è così semplice. Non puoi semplicemente sommare tutti i campi RSS e ottenere il valore riportato used da free . Ci sono molte ragioni per questo, ma citerò un paio delle più importanti.

  • Quando un processo esegue il fork, sia il genitore che il figlio verranno visualizzati con lo stesso RSS. Tuttavia Linux utilizza la copia su scrittura in modo che entrambi i processi utilizzino realmente la stessa memoria. Solo quando uno dei processi modifica la memoria verrà effettivamente duplicato.
    Ciò causerà il free numero inferiore a top Somma RSS.

  • Il valore RSS non include la memoria condivisa. Poiché la memoria condivisa non è di proprietà di nessun processo, top non lo include in RSS.
    Ciò causerà il free numero maggiore di top Somma RSS.


Se stai cercando numeri di memoria che si sommano dai un'occhiata a smem:

smem è uno strumento che può fornire numerosi rapporti sull'utilizzo della memoria sui sistemi Linux. A differenza degli strumenti esistenti, smem può segnalare la dimensione del set proporzionale (PSS), che è una rappresentazione più significativa della quantità di memoria utilizzata da librerie e applicazioni in un sistema di memoria virtuale.

Poiché grandi porzioni di memoria fisica sono in genere condivise tra più applicazioni, la misura standard dell'utilizzo della memoria nota come RSS (resident set size) sovrastimerà notevolmente l'utilizzo della memoria. PSS invece misura la "quota equa" di ciascuna applicazione di ciascuna area condivisa per fornire una misura realistica.

Ad esempio qui:

# smem -t
  PID User     Command                         Swap      USS      PSS      RSS
...
10593 root     /usr/lib/chromium-browser/c        0    22868    26439    49364 
11500 root     /usr/lib/chromium-browser/c        0    22612    26486    49732 
10474 browser  /usr/lib/chromium-browser/c        0    39232    43806    61560 
 7777 user     /usr/lib/thunderbird/thunde        0    89652    91118   102756 
-------------------------------------------------------------------------------
  118 4                                       40364   594228   653873  1153092 

Quindi PSS è la colonna interessante qui perché tiene conto della memoria condivisa.
A differenza di RSS ha senso sommarlo. Qui otteniamo 654 Mb totali per i processi userland.

L'output a livello di sistema racconta il resto:

# smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory        345784     297092      48692 
userspace memory             654056     181076     472980 
free memory                   15828      15828          0 
----------------------------------------------------------
                            1015668     493996     521672 

Quindi 1Gb RAM totale =654Mb processi in area utente + 346Mb memoria del kernel + 16 Mb gratis
(più o meno qualche Mb)

Complessivamente circa la metà della memoria è utilizzata per la cache (494Mb).

Domanda bonus :cos'è la cache userland rispetto alla cache del kernel qui?

btw per qualcosa di visivo prova:

# smem  --pie=name


Un ottimo strumento è pmap che elenca l'uso corrente della memoria per un determinato processo:

pmap -d PID

Per ulteriori informazioni su di esso vedere la pagina man man pmap e dai anche un'occhiata a 20 strumenti di monitoraggio del sistema Linux che ogni amministratore di sistema dovrebbe conoscere, che elencano ottimi strumenti che utilizzo sempre per ottenere informazioni sulla mia macchina Linux.


Linux
  1. Linux:limite all'utilizzo della memoria per un singolo processo Linux?

  2. Linux:reale utilizzo della memoria?

  3. Picco di utilizzo della memoria di un processo Linux/Unix

  4. Limitazione dell'utilizzo della memoria/CPU del processo su Linux

  5. limitare l'utilizzo della memoria in R sotto Linux

Utilizzo della memoria di Linux

Come controllare l'utilizzo della memoria in Linux

Comando gratuito Linux (controlla l'utilizzo della memoria)

Determinazione dell'utilizzo del disco in Linux utilizzando il comando "du".

Recuperare l'utilizzo della CPU e l'utilizzo della memoria di un singolo processo su Linux?

Ubuntu Linux:elabora la memoria di scambio e l'utilizzo della memoria