Πώς να χρησιμοποιήσετε την εντολή vmstat στο Linux

Ο υπολογιστής σας Linux ή macOS χρησιμοποιεί εικονική μνήμη. Ανακαλύψτε πώς επηρεάζει τη χρήση της φυσικής μνήμης, της CPU και των πόρων του σκληρού δίσκου από το σύστημά σας.

Τι είναι η εικονική μνήμη;

Ο υπολογιστής σας είναι εφοδιασμένος με μια πεπερασμένη ποσότητα φυσικής μνήμης που ονομάζεται μνήμη τυχαίας προσπέλασης (ΕΜΒΟΛΟ). Αυτή η μνήμη RAM πρέπει να διαχειρίζεται από τον πυρήνα και να μοιράζεται μεταξύ του λειτουργικού συστήματος και όποιων εφαρμογών τυχαίνει να εκτελούνται. Εάν αυτές οι συνδυασμένες απαιτήσεις ζητούν περισσότερη μνήμη από αυτή που είναι φυσικά εγκατεστημένη στον υπολογιστή σας, τι μπορεί να κάνει ο πυρήνας;

Τα λειτουργικά συστήματα Linux και Unix όπως το macOS μπορούν να χρησιμοποιήσουν χώρο στον σκληρό σας δίσκο για να τους βοηθήσουν να διαχειριστούν τις απαιτήσεις μνήμης. Μια δεσμευμένη περιοχή χώρου στον σκληρό δίσκο που ονομάζεται “swap space” μπορεί να χρησιμοποιηθεί σαν να ήταν επέκταση της μνήμης RAM. Αυτή είναι η εικονική μνήμη.

Ο πυρήνας Linux μπορεί να γράψει τα περιεχόμενα ενός μπλοκ μνήμης σε χώρο ανταλλαγής και να ελευθερώσει αυτήν την περιοχή της μνήμης RAM για χρήση από άλλη διεργασία. Η swapped out—ονομάζεται επίσης «σελιδοποιημένη» μνήμη—μπορεί να ανακτηθεί από τον χώρο swap και να επαναφερθεί στη RAM όταν απαιτείται.

Φυσικά, η ταχύτητα πρόσβασης για σελιδοποιημένη μνήμη είναι μικρότερη από αυτή της μνήμης που διατηρείται στη μνήμη RAM. Και αυτό δεν είναι το μόνο αντάλλαγμα. Ενώ η εικονική μνήμη παρέχει έναν τρόπο για το Linux να διαχειρίζεται τις απαιτήσεις μνήμης του, η χρήση εικονικής μνήμης επιβαρύνει σε άλλα σημεία του υπολογιστή.

Ο σκληρός σας δίσκος πρέπει να εκτελεί περισσότερες αναγνώσεις και εγγραφές. Ο πυρήνας —και επομένως η CPU— πρέπει να κάνει περισσότερη δουλειά καθώς ανταλλάσσει τη μνήμη, εναλλάσσει τη μνήμη και διατηρεί όλες τις πλάκες σε περιστροφή για να ικανοποιήσει τις ανάγκες μνήμης των διαφορετικών διεργασιών.

Το Linux παρέχει έναν τρόπο για να παρακολουθείτε όλη αυτή τη δραστηριότητα με τη μορφή της εντολής vmstat, η οποία αναφέρει στατιστικά εικονικής μνήμης.

Η εντολή vmstat

Εάν πληκτρολογήσετε vmstat ως εντολή χωρίς παραμέτρους, θα σας δείξει ένα σύνολο τιμών. Αυτές οι τιμές είναι οι μέσοι όροι για καθένα από τα στατιστικά στοιχεία από την τελευταία επανεκκίνηση του υπολογιστή σας. Αυτοί οι αριθμοί δεν αποτελούν στιγμιότυπο των τιμών «αυτή τη στιγμή».

vmstat

Εμφανίζεται ένας σύντομος πίνακας τιμών.

Υπάρχουν στήλες με τίτλο Procs, Memory, Swap, IO, System και CPU. Η τελευταία στήλη (η πιο δεξιά στήλη) περιέχει τα δεδομένα που σχετίζονται με την CPU.

Ακολουθεί μια λίστα με τα στοιχεία δεδομένων σε κάθε στήλη.

Proc

r: Ο αριθμός των διεργασιών με δυνατότητα εκτέλεσης. Αυτές είναι διεργασίες που έχουν ξεκινήσει και είτε εκτελούνται είτε περιμένουν την επόμενη ριπή κύκλων CPU με χρονική τομή.
β: Ο αριθμός των διεργασιών σε αδιάκοπο ύπνο. Η διαδικασία δεν βρίσκεται σε αδράνεια, εκτελεί μια κλήση συστήματος αποκλεισμού και δεν μπορεί να διακοπεί έως ότου ολοκληρώσει την τρέχουσα ενέργειά της. Συνήθως, η διαδικασία είναι ένα πρόγραμμα οδήγησης συσκευής που περιμένει να κυκλοφορήσει κάποιος πόρος δωρεάν. Οποιεσδήποτε διακοπές στην ουρά για αυτήν τη διαδικασία αντιμετωπίζονται όταν η διαδικασία συνεχίσει τη συνήθη δραστηριότητά της.

  Πώς να ρυθμίσετε ένα κλειδί SSH στο Linux

Μνήμη

swpd: η ποσότητα της εικονικής μνήμης που χρησιμοποιείται. Με άλλα λόγια, πόση μνήμη έχει ανταλλάξει.,
δωρεάν: η ποσότητα της αδρανούς (αχρησιμοποίητης αυτήν τη στιγμή) μνήμης.
buff: η ποσότητα της μνήμης που χρησιμοποιείται ως buffer.
cache: η ποσότητα της μνήμης που χρησιμοποιείται ως προσωρινή μνήμη.

Ανταλαγή

si: Ποσότητα εικονικής μνήμης που ανταλλάχθηκε από το χώρο ανταλλαγής.
έτσι: Η ποσότητα της εικονικής μνήμης που ανταλλάχθηκε για εναλλαγή χώρου.

IO

bi: Μπλοκ που λαμβάνονται από συσκευή μπλοκ. Ο αριθμός των μπλοκ δεδομένων που χρησιμοποιούνται για την εναλλαγή της εικονικής μνήμης πίσω στη μνήμη RAM.
bo: Αποστέλλονται μπλοκ σε συσκευή μπλοκ. Ο αριθμός των μπλοκ δεδομένων που χρησιμοποιούνται για την εναλλαγή εικονικής μνήμης από τη μνήμη RAM σε χώρο ανταλλαγής.

Σύστημα

σε: Ο αριθμός των διακοπών ανά δευτερόλεπτο, συμπεριλαμβανομένου του ρολογιού.
cs: Ο αριθμός των αλλαγών περιβάλλοντος ανά δευτερόλεπτο. Ένας διακόπτης περιβάλλοντος είναι όταν ο πυρήνας εναλλάσσεται από την επεξεργασία λειτουργίας συστήματος σε επεξεργασία λειτουργίας χρήστη.

ΕΠΕΞΕΡΓΑΣΤΗΣ

Αυτές οι τιμές είναι όλα τα ποσοστά του συνολικού χρόνου CPU.

us: Χρόνος που δαπανάται για εκτέλεση κώδικα εκτός πυρήνα. Δηλαδή, πόσος χρόνος ξοδεύεται στην επεξεργασία του χρόνου χρήστη και στην ωραία επεξεργασία χρόνου.
sy: Χρόνος που δαπανάται για εκτέλεση κώδικα πυρήνα.
id: Χρόνος αδράνειας.
wa: Χρόνος αναμονής για είσοδο ή έξοδο.
st: Χρόνος κλεμμένος από εικονική μηχανή. Αυτός είναι ο χρόνος που μια εικονική μηχανή πρέπει να περιμένει να ολοκληρώσει ο hypervisor την εξυπηρέτηση άλλων εικονικών μηχανών προτού μπορέσει να επιστρέψει και να παρακολουθήσει αυτήν την εικονική μηχανή.

Χρήση χρονικού διαστήματος

Μπορούμε να ζητήσουμε από το vmstat να παρέχει τακτικές ενημερώσεις σε αυτά τα στοιχεία χρησιμοποιώντας μια τιμή καθυστέρησης. Η τιμή καθυστέρησης παρέχεται σε δευτερόλεπτα. Για να ενημερώνονται τα στατιστικά στοιχεία κάθε πέντε δευτερόλεπτα, θα χρησιμοποιούσαμε την ακόλουθη εντολή:

vmstat 5

Κάθε πέντε δευτερόλεπτα το vmstat θα προσθέτει άλλη μια γραμμή δεδομένων στον πίνακα. Θα χρειαστεί να πατήσετε Ctrl+C για να το σταματήσετε.

Χρήση τιμής καταμέτρησης

Η χρήση πολύ χαμηλής τιμής καθυστέρησης θα επιβαρύνει επιπλέον το σύστημά σας. Εάν χρειάζεται να έχετε γρήγορες ενημερώσεις για να προσπαθήσετε να διαγνώσετε ένα πρόβλημα, συνιστάται να χρησιμοποιήσετε μια τιμή μέτρησης καθώς και μια τιμή καθυστέρησης.

Η τιμή μέτρησης λέει στο vmstat πόσες ενημερώσεις πρέπει να εκτελέσει πριν την έξοδό του και σας επιστρέφει στη γραμμή εντολών. Εάν δεν παρέχετε μια τιμή μέτρησης, το vmstat θα εκτελείται μέχρι να σταματήσει με Ctrl+C.

Για να έχετε το vmstat να παρέχει μια ενημέρωση κάθε πέντε δευτερόλεπτα—αλλά μόνο για τέσσερις ενημερώσεις—χρησιμοποιήστε την ακόλουθη εντολή:

vmstat 5 4

Μετά από τέσσερις ενημερώσεις, το vmstat σταματά από μόνο του.

Αλλαγή μονάδων

Μπορείτε να επιλέξετε να εμφανίζονται τα στατιστικά στοιχεία μνήμης και εναλλαγής σε kilobyte ή megabyte χρησιμοποιώντας την επιλογή -S (μονάδα χαρακτήρων). Αυτό πρέπει να ακολουθείται από ένα από τα k , K , m ή M. Αυτά αντιπροσωπεύουν:

  Πώς να αποθηκεύετε αρχεία στο cloud δωρεάν με το Ice Drive στο Linux

k:1000 byte
Κ: 1024 byte
m: 1000000 byte
M: 1048576 byte

Για να ενημερώνονται τα στατιστικά στοιχεία κάθε 10 δευτερόλεπτα με τα στατιστικά στοιχεία μνήμης και εναλλαγής να εμφανίζονται σε megabyte, χρησιμοποιήστε την ακόλουθη εντολή:

vmstat 10 -S M

Τα στατιστικά στοιχεία μνήμης και ανταλλαγής εμφανίζονται πλέον σε megabyte. Σημειώστε ότι η επιλογή -S δεν επηρεάζει τα στατιστικά του μπλοκ IO. Αυτά εμφανίζονται πάντα σε μπλοκ.

Ενεργή και ανενεργή μνήμη

Εάν χρησιμοποιείτε την επιλογή -a (ενεργό), οι στήλες buff και cache μνήμης αντικαθίστανται από τις στήλες “inact” και “active”. Όπως θα πρότειναν, αυτά δείχνουν την ποσότητα της ανενεργής και ενεργής μνήμης.

Για να δείτε αυτές τις δύο στήλες αντί για τις στήλες buff και cache, συμπεριλάβετε την επιλογή -a, όπως φαίνεται:

vmstat 5 -a -S M

Οι ανενεργές και οι ενεργές στήλες επηρεάζονται από την επιλογή -S (unit-character).

Πιρούνια

Ο διακόπτης -f εμφανίζει τον αριθμό των πιρουνιών που έχουν συμβεί από την εκκίνηση του υπολογιστή.

Με άλλα λόγια, αυτό δείχνει τον αριθμό των εργασιών που έχουν ξεκινήσει (και, για το μεγαλύτερο μέρος τους, έκλεισαν ξανά) από την εκκίνηση του συστήματος. Κάθε διαδικασία που ξεκινά από τη γραμμή εντολών θα αύξανε αυτό το ποσοστό. Κάθε φορά που μια εργασία ή διεργασία δημιουργεί ή κλωνοποιεί μια νέα εργασία, αυτός ο αριθμός θα αυξάνεται.

vmstat -f

Η οθόνη πιρουνιών δεν ενημερώνεται.

Εμφάνιση Slabinfo

Ο πυρήνας έχει τη δική του διαχείριση μνήμης που πρέπει να ανησυχείτε καθώς και τη διαχείριση μνήμης για το λειτουργικό σύστημα και όλες τις εφαρμογές.

Όπως μπορείτε να φανταστείτε ο πυρήνας εκχωρεί και εκχωρεί μνήμη ξανά και ξανά για τους πολλούς διαφορετικούς τύπους αντικειμένων δεδομένων που πρέπει να χειριστεί. Για να γίνει αυτό όσο το δυνατόν πιο αποτελεσματικό, χρησιμοποιεί ένα σύστημα που ονομάζεται πλάκες. Αυτή είναι μια μορφή προσωρινής αποθήκευσης.

Η μνήμη που εκχωρείται, χρησιμοποιείται και δεν απαιτείται πλέον για έναν συγκεκριμένο τύπο αντικειμένου δεδομένων πυρήνα μπορεί να επαναχρησιμοποιηθεί για άλλο αντικείμενο δεδομένων του ίδιου τύπου χωρίς να εκχωρηθεί και να εκ νέου εκχωρηθεί η μνήμη. Σκεφτείτε τις πλάκες ως προκατανεμημένα, κατασκευασμένα στα μέτρα, τμήματα της μνήμης RAM για τις ανάγκες του πυρήνα.

Για να δείτε τα στατιστικά στοιχεία για τις πλάκες, χρησιμοποιήστε την επιλογή -m (πλάκες). Θα χρειαστεί να χρησιμοποιήσετε το sudo και θα σας ζητηθεί ο κωδικός πρόσβασής σας. Καθώς η έξοδος μπορεί να είναι αρκετά μεγάλη, τη διοχετεύουμε λιγότερο.

sudo vmstat -m | less

Η έξοδος έχει πέντε στήλες. Αυτά είναι:

Προσωρινή μνήμη: Όνομα της κρυφής μνήμης.
num: Ο αριθμός των ενεργών αντικειμένων σε αυτήν την προσωρινή μνήμη.
σύνολο: Ο συνολικός αριθμός των διαθέσιμων αντικειμένων σε αυτήν την κρυφή μνήμη.
μέγεθος: Το μέγεθος κάθε αντικειμένου στη μνήμη cache.
σελίδες: Ο συνολικός αριθμός σελίδων μνήμης που έχουν (τουλάχιστον) ένα αντικείμενο που σχετίζεται αυτήν τη στιγμή με αυτήν την κρυφή μνήμη.

Πατήστε q για να αφήσετε λιγότερο.

Εμφάνιση στατιστικών μετρητών συμβάντων και μνήμης

Για να εμφανίσετε μια σελίδα με μετρητές συμβάντων και στατιστικά μνήμης, χρησιμοποιήστε την επιλογή -s (stats). Σημειώστε ότι είναι ένα πεζό “s”.

vmstat -s

Αν και τα στατιστικά στοιχεία που αναφέρονται είναι σε μεγάλο βαθμό τα ίδια με τις πληροφορίες που αποτελούν την προεπιλεγμένη έξοδο vmstat, ορισμένα από αυτά χωρίζονται με περισσότερες λεπτομέρειες.

  Πώς να διαμορφώσετε μια συσκευή USB σε Fat32 στο Linux

Για παράδειγμα, η προεπιλεγμένη έξοδος συνδυάζει τόσο τον ωραίο όσο και τον μη ωραίο χρόνο CPU χρήστη στη στήλη “εμάς”. Η εμφάνιση -s (stats) παραθέτει αυτά τα στατιστικά στοιχεία ξεχωριστά.

Εμφάνιση στατιστικών στοιχείων δίσκου

Μπορείτε να αποκτήσετε μια παρόμοια λίστα στατιστικών στοιχείων δίσκου χρησιμοποιώντας την επιλογή -d (disk).

vmstat -d | less

Για κάθε δίσκο, εμφανίζονται τρεις στήλες, αυτές είναι Reads, Writes και IO.

Το IO είναι η πιο δεξιά στήλη. Σημειώστε ότι η στήλη sec στο IO μετράται σε δευτερόλεπτα, αλλά τα στατιστικά στοιχεία που βασίζονται στον χρόνο στις στήλες ανάγνωσης και εγγραφής μετρώνται σε χιλιοστά του δευτερολέπτου.

Αυτό σημαίνουν οι στήλες:

Διαβάζει

σύνολο: Ο συνολικός αριθμός αναγνώσεων δίσκου.
συγχώνευση: Ο συνολικός αριθμός των ομαδοποιημένων αναγνώσεων.
τομείς: Ο συνολικός αριθμός τομέων που έχουν διαβαστεί.
ms: Συνολικός αριθμός χρόνου σε χιλιοστά του δευτερολέπτου που χρησιμοποιήθηκαν για την ανάγνωση δεδομένων από το δίσκο.

γράφει

σύνολο: Ο συνολικός αριθμός εγγραφών δίσκου.
συγχωνευμένα: Ο συνολικός αριθμός ομαδοποιημένων εγγραφών.
τομείς: Ο συνολικός αριθμός τομέων που έχουν εγγραφεί.
ms = Συνολικός αριθμός χρόνου σε χιλιοστά του δευτερολέπτου που χρησιμοποιήθηκαν για την εγγραφή δεδομένων στο δίσκο.

IO

cur: Αριθμός τρέχουσας ανάγνωσης ή εγγραφής δίσκου.
sec: Χρόνος που δαπανάται σε δευτερόλεπτα για οποιαδήποτε ανάγνωση ή εγγραφή σε εξέλιξη.

Εμφάνιση συνοπτικών στατιστικών του δίσκου

Για να δείτε μια γρήγορη εμφάνιση των συνοπτικών στατιστικών για τη δραστηριότητα του δίσκου σας, χρησιμοποιήστε την επιλογή -D (disk-sum). Σημειώστε το κεφαλαίο «D».

vmstat -D

Ο αριθμός των δίσκων μπορεί να φαίνεται ασυνήθιστα υψηλός. Ο υπολογιστής που χρησιμοποιήθηκε για την έρευνα αυτού του άρθρου εκτελεί το Ubuntu. Με το Ubuntu, κάθε φορά που εγκαθιστάτε μια εφαρμογή από ένα Snap, δημιουργείται ένα ψευδοσύστημα αρχείων squashfs το οποίο συνδέεται σε μια συσκευή /dev/loop.

Είναι ενοχλητικό, αυτές οι καταχωρήσεις συσκευών υπολογίζονται ως συσκευές σκληρού δίσκου από πολλές εντολές και βοηθητικά προγράμματα Linux.

Εμφάνιση στατιστικών κατατμήσεων

Για να δείτε στατιστικά στοιχεία που σχετίζονται με ένα συγκεκριμένο διαμέρισμα, χρησιμοποιήστε την επιλογή -p (partition) και δώστε το αναγνωριστικό διαμερίσματος ως παράμετρο γραμμής εντολών.

Εδώ θα δούμε το διαμέρισμα sda1. Το ψηφίο ένα υποδεικνύει ότι αυτό είναι το πρώτο διαμέρισμα στη συσκευή sda, η οποία είναι η κύρια μονάδα σκληρού δίσκου για αυτόν τον υπολογιστή.

vmstat -p sda1

Οι πληροφορίες που επιστρέφονται δείχνουν το συνολικό πλήθος αναγνώσεων και εγγραφών δίσκου προς και από αυτό το διαμέρισμα, καθώς και τον αριθμό των τομέων που περιλαμβάνονται στις ενέργειες ανάγνωσης και εγγραφής δίσκου.

Μια ματιά κάτω από την κουκούλα

Είναι πάντα καλό να ξέρετε πώς να σηκώνετε την κουκούλα και να βλέπετε τι συμβαίνει από κάτω. Μερικές φορές θα προσπαθείτε να λύσετε το πρόβλημα, μερικές φορές θα είναι εκτός ενδιαφέροντος επειδή θέλετε να μάθετε πώς χτυπάει ο υπολογιστής σας.

Το vmstat μπορεί να σας παρέχει πολλές χρήσιμες πληροφορίες. Τώρα ξέρετε πώς να έχετε πρόσβαση σε αυτό και τι σημαίνει. Και το forewarned είναι forearmed—όταν χρειαστεί να σηκώσετε τα μανίκια και να κάνετε κάποια διαγνωστικά, θα ξέρετε ότι έχετε vmstat στο πλευρό σας.