Come comprendere l'utilizzo della memoria e caricare la media nel server Linux


57

Sto usando un server Linux con 128 GB di memoria e 24 core. Uso top per vedere quanto viene utilizzato. Il suo output viene incollato alla fine del post. Ecco due domande:

(1) Vedo che ciascuno dei processi in esecuzione occupa una percentuale molto piccola di memoria (% MEM non più dello 0,2% e la maggior parte solo dello 0,0%), ma come la memoria totale viene quasi utilizzata come nella quarta riga di output ( "Mem: 130766620k totali, 130161072k usati, 605548k liberi, buffer 919300k")? È improbabile che la somma della percentuale di memoria utilizzata su tutti i processi raggiunga quasi il 100%, no?

(2) come comprendere la media del carico sulla prima riga ("media del carico: 14.04, 14.02, 14.00")?

Grazie e saluti!

Modificare:

Grazie!

Mi piace anche ascoltare alcuni numeri approssimativi basati sulla percentuale di memoria utilizzata per determinare se un server è pesantemente caricato, poiché una volta sono diventato quello che ha bloccato il server senza capire il carico corrente.

Lo swap è considerato quasi uguale alla memoria? Ad esempio, quando memoria e swap hanno quasi le stesse dimensioni, se la memoria è quasi esaurita ma lo swap è ancora in gran parte libero, posso semplicemente vederlo come se la percentuale di memoria utilizzata + swap non fosse ancora alta ed eseguire altri nuovi processi?

Come considereresti insieme l'utilizzo della CPU o della memoria (o della memoria + scambio)? Ti preoccupi se uno di loro raggiunge troppo in alto o entrambi?

Uscita della parte superiore :

$ top

 
in alto - 12:45:33 su 19 giorni, 23:11, 18 utenti, caricamento media: 14.04, 14.02, 14.00
Compiti: 484 totali, 12 in esecuzione, 472 addormentati, 0 fermati, 0 zombi
Cpu: 36,7% us, 19,7% sy, 0,0% ni, 43,6% id, 0,0% wa, 0,0% hi, 0,0% si, 0,0% st
Mem: 130766620k totale, 130161072k usato, 605548k libero, buffer 919300k
Swap: 63111312k totali, 500556k usati, 62610756k gratuiti, 124437752k memorizzati nella cache

  PID UTENTE PR NI VIRT RES SHR S% CPU% MEM TIME + COMANDO
 6529 sanchez 18 -2 1075m 219m 13m S 100 0.2 13760: 23 MATLAB
13210 timothy 18 -2 48336 37m 1216 R 100 0,0 3: 56,75 assurdità
13888 timothy 18 -2 48336 37m 1204 R 100 0,0 2: 04,89 assurdità
14542 timothy 18 -2 48336 37m 1196 R 100 0.0 1: 08.34 assurdità
14544 timothy 18 -2 2888 2076 400 R 100 0,0 1: 06,14 raccogliere i dati
 6183 sanchez 18 -2 1133m 195m 13m S 100 0.2 13676: 04 MATLAB
 6795 sanchez 18 -2 1079m 210m 13m S 100 0.2 13734: 26 MATLAB
10178 timothy 18 -2 48336 37m 1204 R 100 0,0 11: 33,93 assurdità 
12438 timothy 18 -2 48336 37m 1216 R 100 0,0 5: 38,17 assurdità
13661 timothy 18 -2 48336 37m 1216 R 100 0,0 2: 44,13 assurdità
14098 timothy 18 -2 48336 37m 1204 R 100 0,0 1: 58,31 assurdità
14335 timothy 18 -2 48336 37m 1196 R 100 0,0 1: 08,93 assurdità
14765 timothy 18 -2 48336 37m 1196 R 99 0.0 0: 32.57 assurdità
13445 timothy 18 -2 48336 37m 1216 R 99 0.0 3: 01.37 assurdità
28990 radice 20 0 0 0 0 S 2 0,0 65: 50,21 pdflush
12141 tim 18 -2 19380 1660 1024 R 1 0,0 0: 04.04 inizio pagina
 1240 radice 15-5 0 0 0 S 0 0,0 16: 07.11 kjournald
 9019 radice 20 0 296m 4460 2616 S 0 0,0 82: 19,51 kdm_greet
    1 radice 20 0 4028 728 592 S 0 0,0 0: 03.11 init
    2 radice 15-5 0 0 0 S 0 0,0 0: 00,00 kthreadd
    3 radice RT -5 0 0 0 S 0 0,0 0: 01,01 migrazione / 0
    4 radice 15-5 0 0 0 S 0 0.0 0: 08.13 ksoftirqd / 0
    5 radice RT -5 0 0 0 S 0 0,0 0: 00,00 watchdog / 0
    6 radice RT -5 0 0 0 S 0 0,0 17: 27,31 migrazione / 1
    7 radice 15 -5 0 0 0 S 0 0,0 0: 01,21 ksoftirqd / 1
    8 radice RT -5 0 0 0 S 0 0,0 0: 00,00 watchdog / 1
    9 radice RT -5 0 0 0 S 0 0,0 10: 02,56 migrazione / 2
   10 radice 15 -5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd / 2
   11 radice RT -5 0 0 0 S 0 0,0 0: 00,00 watchdog / 2
   12 radice RT -5 0 0 0 S 0 0,0 4: 29,53 migrazione / 3
   13 radice 15 -5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd / 3

2
Vedi questo per una buona risposta sulla memoria. serverfault.com/questions/38065/#38074
Zoredache il

E questa risposta per un breve riepilogo sulla media del carico (o questa lettura a lungo per i dettagli).
Nickolay,

Risposte:


56

(1) Vedo che ciascuno dei processi in esecuzione occupa una percentuale molto piccola di memoria (% MEM non più dello 0,2% e la maggior parte solo dello 0,0%), ma come la memoria totale viene quasi utilizzata come nella quarta riga di output ( "Mem: 130766620k totali, 130161072k usati, 605548k liberi, buffer 919300k")? È improbabile che la somma della percentuale di memoria utilizzata su tutti i processi raggiunga quasi il 100%, no?

Per vedere quanta memoria stai attualmente utilizzando, esegui free -m. Fornirà output come:

             buffer condivisi gratuiti totali utilizzati memorizzati nella cache
Mem: 2012 1923 88 0 91 515
- / + buffer / cache: 1316 695
Scambia: 3153 256 2896

Il valore "usato" (1923) della riga superiore corrisponderà quasi sempre al valore mem della riga superiore (2012). Poiché a Linux piace usare qualsiasi memoria di riserva per memorizzare nella cache i blocchi del disco (515).

La chiave utilizzata nella figura da guardare è il valore utilizzato per la riga buffer / cache (1316). Questo è lo spazio attualmente utilizzato dalle applicazioni. Per prestazioni ottimali, questo numero dovrebbe essere inferiore alla memoria totale (2012). Per evitare errori di memoria insufficiente, deve essere inferiore alla memoria totale (2012) e allo spazio di scambio (3153).

Se si desidera vedere rapidamente quanta memoria è libera, consultare il valore libero della riga buffer / cache (695). Questa è la memoria totale (2012) - l'effettiva utilizzata (1316). (2012-1316 = 696, non 695, questo sarà solo un problema di arrotondamento)

(2) come comprendere la media del carico sulla prima riga ("media del carico: 14.04, 14.02, 14.00")?

Questo articolo sulla media del carico utilizza una buona analogia del traffico ed è il migliore che ho trovato finora: Comprendere il carico della CPU Linux - quando dovresti preoccuparti? . Nel tuo caso, come sottolineato dalla gente:

Nel sistema multiprocessore, il carico è relativo al numero di core del processore disponibili. Il segno "100% di utilizzo" è 1,00 su un sistema single-core, 2,00, su un dual-core, 4,00 su un quad-core, ecc.

Quindi, con una media di carico di 14,00 e 24 core, il tuo server è lungi dall'essere sovraccarico.


17

I sistemi simili a Unix, incluso Linux, sono progettati per rendere possibile l'uso più efficiente della RAM disponibile. In termini molto generali, ci sono 3 stati in cui ogni MB di RAM può trovarsi:

  1. Gratuito
  2. Utilizzato da un processo
  3. Utilizzato per i buffer

Il terzo stato viene utilizzato solo come spazio di memoria virtuale e deve essere riassegnato ogni volta che è necessario, ovvero la memoria totale disponibile per i programmi è davvero Free + UsedforBuffers. Pertanto, lo spazio allocato nel buffer non verrà visualizzato come assegnato a qualsiasi processo specifico.

La tua domanda sul carico medio è un po 'più interessante, in quanto può essere facilmente interpretata male. Per la storia completa, vedi questo articolo su Linux . La migliore sintesi è una citazione diretta dall'articolo,

Il calcolo della media del carico è meglio considerato come una media mobile dei processi nella coda di esecuzione di Linux contrassegnata come in esecuzione o ininterrotta

Ciò significa che puoi considerare la tua media di carico come (# di processi in esecuzione) + (# di processi in attesa su IO). Tenendo presente che in qualsiasi momento è possibile avere $ CORE numero di processi in esecuzione, direi che la tua media di carico di 14 è piuttosto bassa.


Grazie! Qual è la percentuale di memoria utilizzata (o memory + swap) considerata pesante e migliore per non eseguire nuovi processi? Cerchi memoria o memory + swap? Lo swap usato è mostrato nella parte superiore della dimensione dello swap effettivamente utilizzato? Per quanto riguarda la media del carico della CPU, si misura il carico effettivo in base a "media del carico / numero principale"? Quanto valuteresti che il server è pesantemente caricato? Grazie e saluti!
Tim

2
Il carico è solo un indicatore. Come regola generale, un carico maggiore dei core è una cosa negativa. Generalmente un'alta percentuale di memoria utilizzata è una cosa negativa. Non è un valore binario che puoi dire "va tutto bene". Se esaurisci la RAM, non hai abbastanza per eseguire più processi. Se non ti esaurisci, ne hai un sacco. Dipende molto dalle specifiche della tua situazione.
Cian,

4

Dalla sarpagina man:

       La media del carico viene calcolata come il numero medio di eseguibili o 
       attività in esecuzione (stato R) e il numero di attività ininterrotte
       sleep (stato D) nell'intervallo specificato.

Dalla uptimepagina man:

       La media del carico di sistema è il numero medio di processi che sono entrambi
       in uno stato eseguibile o ininterrotto. Un processo in uno stato eseguibile
       sta usando la CPU o sta aspettando di usare la CPU. Un processo in unin‐
       lo stato terrupable è in attesa di un accesso I / O, ad es. in attesa del disco.
       Le medie sono prese su tre intervalli di tempo. Caricare le medie
       non sono normalizzati per il numero di CPU in un sistema, quindi un carico medio
       età di 1 indica che un singolo sistema CPU è sempre caricato su un 4
       Sistema CPU significa che era inattivo il 75% delle volte.

3
  1. Linux, da qualche tempo, ha gestito la sua memoria in un modo che rende topsostanzialmente inutile quella linea , mantenendo generalmente la maggior parte della memoria della macchina allocata per vari usi quando non è richiesta da un processo utente.
  2. La media del carico è il numero medio di processi in esecuzione o in attesa di esecuzione. Di solito ha una forte correlazione negativa con latenza / reattività del sistema, quindi lo desideri il più basso possibile. Dal momento che ciascuna delle tue CPU può eseguire qualcosa in qualsiasi momento, tuttavia, sembra che tu stia andando abbastanza bene a 14 anni.

Grazie! Per quanto riguarda 1, vuoi dire che alcuni processi non vengono visualizzati nella parte superiore ma utilizzano molta memoria? O che la quarta riga di output sulla memoria ("Mem: 130766620k totali, 130161072k usati, 605548k liberi, buffer 919300k") è fuorviante, dovrei guardare la somma della percentuale di memoria usata da tutti i processi mostrati in alto e nel mio caso Posso eseguire in sicurezza alcuni nuovi processi che consumano memoria?
Tim

2
Come hanno indicato altre risposte, la media del carico dovrebbe essere confrontata con il numero di processori, quindi 14 non è così tanto su un sistema a 24 core. Sarebbe un po 'come 14/24 = 0,58 su un sistema single-core (bene).
David Z,

@Tim: intendo quest'ultimo.
caos,

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.