Sono un po' confuso su alcuni dei risultati che vedo da ps e gratuito .
Sul mio server, questo è il risultato di free -m
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 2048 2033 14 0 73 1398
-/+ buffers/cache: 561 1486
Swap: 2047 11 2036
La mia comprensione di come Linux gestisce la memoria è che memorizzerà l'utilizzo del disco nella RAM, in modo che ogni accesso successivo sia più rapido. Credo che questo sia indicato dalle colonne "in cache". Inoltre, nella RAM sono memorizzati vari buffer, indicati nella colonna "buffer".
Quindi, se ho capito bene, l'utilizzo "reale" dovrebbe essere il valore "usato" di "-/+ buffer/cache" o 561 in questo caso.
Quindi supponendo che tutto ciò sia corretto, la parte che mi lancia sono i risultati di ps aux
.
La mia comprensione di ps
risultati, è che la 6a colonna (RSS), rappresenta la dimensione in kilobyte utilizzata dal processo per la memoria.
Quindi, quando eseguo questo comando:
[[email protected] ~]# ps aux | awk '{sum+=$6} END {print sum / 1024}'
1475.52
Il risultato non dovrebbe essere la colonna "usata" di "-/+ buffer/cache" da free -m
?
Quindi, come posso determinare correttamente l'utilizzo della memoria di un processo in Linux? A quanto pare la mia logica è sbagliata.
Risposta accettata:
Copia/incolla spudoratamente la mia risposta da serverfault proprio l'altro giorno 🙂
Il sistema di memoria virtuale Linux non è così semplice. Non puoi semplicemente sommare tutti i campi RSS e ottenere il valore riportato used
di free
. Ci sono molte ragioni per questo, ma ne prenderò un paio di quelle più grandi.
-
Quando un processo si biforca, sia il genitore che il figlio verranno mostrati con lo stesso RSS. Tuttavia Linux utilizza copy-on-write in modo che entrambi i processi utilizzino davvero la stessa memoria. Solo quando uno dei processi modifica la memoria, questa verrà effettivamente duplicata.
Ciò causerà ilfree
numero deve essere inferiore altop
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à ilfree
numero deve essere maggiore deltop
Somma RSS.