Come interpretare l'output dal comando 'top' di Linux?


27

A seguito di una discussione fatta QUI su come PHP-FPMconsumare memoria, ho appena riscontrato un problema nella lettura della memoria al topcomando. Ecco uno screenshot del mio topsubito dopo il riavvio PHP-FPM. Tutto è normale: circa 20 PHP-FPMprocessi, ognuno dei quali consuma 5,5 MB di memoria (0,3% del totale).

inserisci qui la descrizione dell'immagine

Ecco il server obsoleto subito prima del riavvio di PHP-FPM(un giorno dopo il riavvio precedente). Qui ne abbiamo ancora circa 25 PHP-FPMcon doppio utilizzo della memoria (10 MB che indicano lo 0,5% del totale). Pertanto, la memoria totale utilizzata dovrebbe essere 600-700 MB. Quindi, perché è stata utilizzata la memoria da 1,6 GB?

inserisci qui la descrizione dell'immagine



@ephemient no, non è il caso qui. Ho controllato tutte queste cose. Questo è qualcosa collegato a PHP-FPM e la memoria verrà liberata riavviando solo PHP-FPM. Ad ogni modo, i valori di Mem e buffer / cache in freesono identici.
Googlebot

6
Sembra che tu stia utilizzando una "VM" Virtuozzo. Tutte le scommesse sono spente per quanto riguarda la contabilità della memoria.
Womble


Caro womble ed effimero: ho rubato entrambe le tue risposte! ridacchia
Wesley il

Risposte:


34

TL; DR 1

Il tuo server si trova in una sorta di contenitore virtuozzo / openvz / virtualization-du-jour . Cercare di dare un senso all'utilizzo della memoria è inclinarsi contro i mulini a vento.

TL; DR 2

Linux ha mangiato la tua RAM! Ma va bene lo fa a tutti.


La lunga storia

Analizziamolo!

Nella Mem:sezione abbiamo:

  • $n total: la quantità di RAM fisica nel tuo computer
  • $n used: quanta memoria viene consumata da Linux, non solo la somma dei processi.
  • $n free: Quanta RAM non viene consumata da Linux. Ciò non tiene conto del fatto che la memoria cache e bufferizzata è essenzialmente "libera".
  • $n buffers: spazio buffer è il punto in cui sono memorizzati i blocchi di I / O del disco che sono stati letti o in attesa di una scrittura. Un buffer è una rappresentazione RAM di un singolo blocco del disco.

Nella Swap:sezione abbiamo:

  • $n total: Autoesplicativo. Quantità di spazio su disco disponibile per lo scambio di pagine.
  • $n used: Autoesplicativo. Quanto spazio di scambio del disco viene utilizzato.
  • $n free: Herp Derp.
  • $n cache: Strettamente correlato ai buffer sopra. Fa effettivamente parte della cache della pagina e di per sé non ha spazio sul disco fisico. Non preoccuparti dei dettagli di questa conversazione.

La parte interessante arriva quando corri free -m. Vedrai tre righe e tutti i numeri saranno correlati con la parte superiore. Darò il mio PC come esempio:

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

La riga Mem mostra la RAM totale in megabyte ( $n totalin alto), quanto viene utilizzato ( $n usedin alto), quanto è gratuito ( $n freein alto), quanto viene condiviso (ignoralo) e ora arriva la parte buona! Le colonne bufferse cachedsono free -mcorrelate, prevedibilmente $n bufferse $n cache. Ma dai un'occhiata alla seconda riga free -mche inizia con quella -/+ buffers/cache:. La matematica mostra che la quantità utilizzata è davvero (totale) - ((buffer usato)). Free è (totale) - (theNewUsed).

Che cosa significa tutto questo? Significa che Linux ha mangiato la tua RAM! La storia breve è che il kernel Linux divora la RAM in quanto è disponibile per l'uso per la memorizzazione nella cache del disco. Non c'è niente che tu possa fare al riguardo a meno che tu non abbia voglia di compilare un kernel personalizzato. Consiglio del professionista: no.

La RAM è davvero lì e libera per i processi da utilizzare a loro piacimento. Questo è ciò che si intende per -/+ buffers/cache:riga free -m. Tuttavia, ti trovi all'interno di un contenitore di virtualizzazione non hyper-visor che rende le cose un po 'strane. A questo punto non puoi semplicemente fare il punto della tua memoria con precisione in byte. Tuttavia, non vedi alcun comportamento terribilmente insolito.

Stai calmo e vai avanti. Inoltre, ottieni un server fisico (a meno che non ti piacciano le statistiche di memoria che sembrano Kreskin come SysAdmin).


La quantità utilizzata non è ((used-buffers) -cached)?
mac,

1

Top non è il modo migliore per controllare l'utilizzo della memoria. Tuttavia, poiché la mia domanda è stata contrassegnata come duplicata di questa domanda, pubblicherò la mia risoluzione qui.

Ho letto su un forum che ps_mem.py controllerà l'utilizzo della memoria per te.

Repository: https://github.com/pixelb/ps_mem/

Scaricare:

pip install ps_mem

Uso:

ps_mem

Produzione:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================
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.