Σε αυτό το άρθρο θα μάθουμε διάφορους τρόπους για να εντοπίζουμε ποιες διεργασίες/προγράμματα χρησιμοποιούν το swap του Linux και πόσο χώρο καταναλώνει το καθένα. Είναι χρήσιμο να το ξέρουμε, ιδιαίτερα σε server μηχανήματα π.χ. για να εντοπίζουμε ποια προγράμματα έχουν εξαντλήσει τη μνήμη και γράφουν στο swap στο δίσκο. Η' απλά να παρακολουθούμε μια συγκεκριμένη διεργασία, π.χ. τη mysql ή το memcached, που μας προβληματίζει... Ξεκινάμε λοιπόν.
Εντοπισμός με την top
H πρώτη και πιο απλή λύση για να δούμε τις διεργασίες που χρησιμοποιούν το swap είναι η κλασική εντολή top.
Στην κλασική λειτουργία της, η top δεν δίνει πληροφορίες για τη χρήση swap κάθε διεργασίας. Μπορούμε όμως να προσθέσουμε μια στήλη Swap ως εξής. Πατάμε το πλήκτρο f και εμφανίζεται η οθόνη επιλογής στηλών:
Πηγαίνουμε με τα βελάκια στο Swap και πατάμε Space για να το επιλέξουμε.
Για να βάλουμε τη νέα στήλη να εμφανίζεται σε συγκεκριμένη θέση, πατάμε το δεξί βελάκι για να μπορούμε να το μετακινήσουμε και με τα πλήκτρα πάνω-κάτω (βελάκια) το πηγαίνουμε στη θέση που θέλουμε.
Τέλος πατάμε s για να σορτάρουμε και q για να βγούμε από την οθόνη. Ορίστε το τελικό αποτέλεσμα.
Χμ... η 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)
- Συνδεθείτε ή εγγραφείτε για να σχολιάσετε