Come posso scoprire che i processi utilizzano lo spazio di swap?


10

Ho un server Linux che riporta circa 9 GB di swap usati: superiore

Ma non riesco a capire dove sia lo swap, alcuni risultati di Google hanno detto che top - Ocommad follow by pmostrerà l'utilizzo dello swap per processo. Ma come mostrato nell'immagine sopra, prendere una breve somma della colonna SWAP mostra che vengono usati> 10 GB di swap, quindi da dove viene la cifra di 9 GB per l'utilizzo dello swap?

Top riporta che i buffer utilizzano circa 96492 KB di RAM. C'è qualcosa che posso fare per utilizzare questo, invece di usare swap?


1
top (per la pagina man) calcola SWAP come VIRTUAL - utilizzo della RAM FISICA. Non del tutto esatto dai miei esperimenti.
lornix,

Risposte:


6

È possibile che più programmi utilizzino la stessa area di scambio, quindi verrà segnalato due volte.

Non è necessario provare a dire a Linux di utilizzare l'area bufferizzata anziché swap: è già molto intelligente su ciò che sta facendo. Se stai usando 9 GB di swap e 9 GB di buffer, questa è una buona cosa ... ciò significa che Linux comprende che 9 GB di roba caricati nella memoria non vengono utilizzati attivamente, quindi è più efficiente scambiarlo su disco in modo che il tuo il buffer può aumentare e migliorare le prestazioni.


EDIT: se sommi tutta la memoria utilizzata da ogni processo, otterrai molto di più della tua RAM fisica. Ciò è dovuto al fatto che le librerie condivise sono utilizzate da più programmi, così come il modo in cui Linux gestisce le forcelle: non duplica l'intero programma in memoria, ma duplica solo le parti che differiscono tra le due istanze. In alcuni casi, la memoria video può essere mostrata come parte di un processo X: penso che le vecchie schede Voodoo3 lo facessero. Ci possono essere altri casi in cui anche la memoria "fantasma" può apparire in alto.


Non penso che le librerie condivise debbano essere conteggiate come swap, perché quando si avvia il sistema, non viene utilizzato lo swap ma ci sono molte librerie condivise già caricate. Ad ogni modo, vedo che il mio sistema utilizza circa 9 GB di partizione di swap, voglio solo scoprire quale processo ha utilizzato la maggior parte dello swap (escludere librerie di condivisione, file delle mappe di memoria ...)
maschera di protezione

3

L'analisi della sottodirectory / proc funziona:

Come uno script bash:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

L'output può essere ordinato Hi-Lo tramite tubazioni per ordinare:

{blah}| sort -rn

Naturalmente, riscrivi questo nella tua lingua preferita della settimana come desideri. Il mio Awk-fu non è forte.

(Cut-n-pastable)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr


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.