Πως βρίσκουμε ποιες διεργασίες χρησιμοποιούν το swap του Linux και πόσο

dimitris | Πέμ, 04/11/2019 - 23:28 | 6'

Σε αυτό το άρθρο θα μάθουμε διάφορους τρόπους για να εντοπίζουμε ποιες διεργασίες/προγράμματα χρησιμοποιούν το swap του Linux και πόσο χώρο καταναλώνει το καθένα. Είναι χρήσιμο να το ξέρουμε, ιδιαίτερα σε server μηχανήματα π.χ. για να εντοπίζουμε ποια προγράμματα έχουν εξαντλήσει τη μνήμη και γράφουν στο swap στο δίσκο. Η' απλά να παρακολουθούμε μια συγκεκριμένη διεργασία, π.χ. τη mysql ή το memcached, που μας προβληματίζει... Ξεκινάμε λοιπόν.

Εντοπισμός με την top

H πρώτη και πιο απλή λύση για να δούμε τις διεργασίες που χρησιμοποιούν το swap είναι η κλασική εντολή top.

εντοπισμός swap με την top

Στην κλασική λειτουργία της, η top δεν δίνει πληροφορίες για τη χρήση swap κάθε διεργασίας. Μπορούμε όμως να προσθέσουμε μια στήλη Swap ως εξής. Πατάμε το πλήκτρο f και εμφανίζεται η οθόνη επιλογής στηλών:

εντοπισμός swap με την top

Πηγαίνουμε με τα βελάκια στο Swap και πατάμε Space για να το επιλέξουμε.

εντοπισμός swap με την top

Για να βάλουμε τη νέα στήλη να εμφανίζεται σε συγκεκριμένη θέση, πατάμε το δεξί βελάκι για να μπορούμε να το μετακινήσουμε και με τα πλήκτρα πάνω-κάτω (βελάκια) το πηγαίνουμε στη θέση που θέλουμε.

εντοπισμός swap με την top

Τέλος πατάμε s για να σορτάρουμε και q για να βγούμε από την οθόνη. Ορίστε το τελικό αποτέλεσμα.

εντοπισμός swap με την top

Χμ... η mysql έφταιγε...

Πως βρίσκουμε πόσο swap χρησιμοποιεί συγκεκριμένη διεργασία

Ωραίο το top, αλλά είναι overkill όταν θες απλά να δεις μια συγκεκριμένη διεργασία πόσο χώρο της swap έχει καταναλώσει ακριβώς. Αυτή η πληροφορία υπάρχει ήδη στο σύστημα αρχείων του Linux (ναι, καλά διαβάσατε, τα πάντα είναι αρχεία στο Linux), κι αρκεί απλά να ξέρουμε το process id (PID) της διεργασίας. Π.χ. θέλουμε να βρούμε τι swap ρουφάει ο memcached; Ευκολα, γράφουμε:

pidof memcached

Μας απαντά με έναν αριθμό:

# pidof memcached
67893

Τον οποίο τον χρησιμοποιούμε στην παρακάτω εντολή:

# grep --color VmSwap /proc/67893/status

και μας απαντά:

# grep --color VmSwap /proc/67893/status
VmSwap:        0 kB

Τέλεια!

Ας δούμε και την mysql:

# pidof mysqld
33890
# grep --color VmSwap /proc/33890/status
VmSwap:   150668 kB

αχα...

Πως ελέγχουμε πόσο swap πιάνει ένα multi-process πρόγραμμα

Τι γίνεται όμως αν θέλουμε να τσεκάρουμε ένα πρόγραμμα που έχει πολλά processes όπως π.χ. o Apache2 ή η PHP;

Ε, τώρα, βάζουμε και λίγο bash μαγεία, και φτιάχνουμε αυτό το απλό oneliner, όπου απλά βάζετε το ΟΝΟΜΑ του προγράμματος:

for i in `pidof ΟΝΟΜΑ`;do grep --color VmSwap /proc/$i/status;done

Για παράδειγμα για να δούμε τι κάνει ο Apache2:

# for i in `pidof apache2`;do grep --color VmSwap /proc/$i/status;done
VmSwap:        0 kB
VmSwap:        0 kB
VmSwap:        0 kB
VmSwap:        0 kB
VmSwap:        0 kB

Πως βλέπουμε την κατανάλωση swap όλων των διεργασιών του Linux

Ε, μια που φτάσαμε μέχρι εδώ, μάλλον θέλουμε να δούμε κι ένα πιο πολύπλοκο αλλά χρήσιμο scriptάκι μιας γραμμής. Το παρακάτω μακρυνάρι διατρέχει όλα τα αρχεία στο /proc (=διεργασίες) και με λίγη awk τυπώνει πόσο χώρο swap (σε KB) τρώει κάθε μια, αλλά πρώτα τα σορτάρει όμορφα ώστε να βλέπουμε πάνω-πάνω ποιο process είναι το πιο... "swapοφάγο":

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less

Τώρα που ξέρουμε λοιπόν πως να εντοπίσουμε ποιες διεργασίες ροκανίζουν τη swap μας, μπορούμε να ψάξουμε να βρούμε το γιατί. Αλλά αυτό είναι μια άλλη ιστορία :)

Δείτε ακόμα:

Linux monitoring tools: Πόση μνήμη καταναλώνει κάθε process και εφαρμογή

Linux server troubleshooting: Βασικά εργαλεία (αν έχεις shell access)

Βελτίωση της απόδοσης του πυρήνα Linux με την εντολή sysctl

System Administration

Slackware vs Φιλικών διανομών και λίγο απο Debian

Φόρουμ
Δώσε αστέρια!

MO: 4.5 (ψήφοι: 2)