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

Σημείωση : Δεν θα δούμε λεπτομέρειες σχετικά με το διαμέρισμα ανταλλαγής. Μπορείτε να διαβάσετε όλα σχετικά με αυτό στο άρθρο μας σχετικά με το τι πρέπει να ξέρετε για το διαμέρισμα Swap στο Linux.

Swappiness

Υπάρχει μια τιμή που ονομάζεται swappiness σε συστήματα τύπου UNIX που καθορίζουν τον τρόπο χειρισμού των σελίδων στη μνήμη. Η προεπιλεγμένη τιμή στα περισσότερα συστήματα είναι "60", αλλά μπορεί να οριστεί σε οτιδήποτε μεταξύ 0 και 100. Εάν η μνήμη τρέχει χαμηλή, ο πυρήνας θα εκπέμπει κάποιες κρυφές μνήμες για να έχει περισσότερη ελεύθερη μνήμη RAM για διαδικασίες ή θα ανταλλάξει κάποια διαδικασία σελίδες από τη μνήμη RAM στο δίσκο.

Μια προεπιλογή 60 σημαίνει ότι η εναλλαγή θα χρησιμοποιηθεί λιγότερο, και οι κρυφές μνήμες I / O πιθανότατα θα ελευθερωθούν για την ανακατανομή της μνήμης RAM. Οι απομακρυσμένες αποθήκες θεωρούνται "φθηνότερες" (λιγότερες εντάσεις πόρων), ενώ η εναλλαγή σελίδων περιλαμβάνει τις ανάγνωσεις και τις εγγραφές του δίσκου, καθιστώντας τις πιο «ακριβές». Σε μια τιμή του '60, η χρήση ανταλλαγής θα είναι ελαφρώς χαμηλότερη από την επαναχρησιμοποίηση της κρυφής μνήμης. Εάν η τιμή της swappiness αυξηθεί σε 100, η ​​εναλλαγή και η απομάκρυνση της προσωρινής μνήμης αρχείων θα χρησιμοποιηθούν με το ίδιο βάρος. Αυτό σημαίνει περισσότερη εναλλαγή και ταχύτερη I / O από την προεπιλογή. Χαμηλότερες τιμές, όπως το "10", σημαίνουν ότι η εναλλαγή θα χρησιμοποιηθεί πολύ λιγότερο, και οι I / O cache μπορούν να εκτονωθούν πολύ νωρίτερα υπέρ των διαδικασιών. Αυτό μπορεί να αυξήσει την αλληλεπίδραση, αλλά θα μπορούσε επίσης να βλάψει την ταχύτητα I / O.

Μείωση της ανταλλαγής

Συχνά θα δείτε τις συμβουλές σχετικά με τους ιστοτόπους και τα φόρουμ για να μειώσετε την swappiness στο "10." Αυτό υποτίθεται ότι θα επιταχύνει τα πράγματα χρησιμοποιώντας λιγότερες ανταλλαγές και διατηρώντας περισσότερες διαδικασίες στη φυσική μνήμη RAM. Αυτή η λογική μπορεί να είναι κάπως υπερβολικά απλή και ίσως να μην είναι "ένα μέγεθος που ταιριάζει σε όλες τις λύσεις".

Η μείωση της αξίας της ανταλλαγής μπορεί να είναι καλή στα ακόλουθα σενάρια:

  • Για συστήματα βάσεων δεδομένων ή αν χρησιμοποιείτε πολλές εφαρμογές με βάση τις βάσεις δεδομένων: Οι βάσεις δεδομένων γενικά χειρίζονται καλύτερα την αποθήκευση αρχείων από το λειτουργικό σύστημα. Αν μειώσετε την εναλλαγή, θα περιορίσετε την προσωρινή αποθήκευση του αρχείου του λειτουργικού συστήματος, δίνοντας έτσι την ευκαιρία στη βάση δεδομένων να χειριστεί τις δικές της κρυφές μνήμες.
  • Για διαδραστικότητα : Εάν κάνετε πολλά πολλά, αλλά χειρίζεστε μερικά αρχεία ή δεν ανοίγετε μεγάλα έγγραφα, αυτό θα μπορούσε να βελτιώσει την ομαλή εμφάνιση του συστήματός σας. Λιγότερες διαδικασίες θα διαγραφούν στο δίσκο και, καθώς η πρόσβαση RAM είναι πολύ πιο γρήγορη, ο υπολογιστής σας μπορεί να αισθάνεται ταχύτερος. Πρέπει επίσης να έχετε κατά νου ότι αυτό μπορεί να μειώσει την απόδοση εισόδου / εξόδου. Εάν έχετε αργούς δίσκους ή κάνετε οτιδήποτε I / O εντατική, μπορεί να βλάψει ακόμα και την απόδοση.
  • Για το εικονικό φάρμακο : Πολλοί πιστεύουν ότι μια χαμηλότερη μετατόπιση θα επιταχύνει το σύστημα. Σοβαρά, αν νομίζετε ότι το σύστημά σας είναι ταχύτερο, μπορεί να έχει ως αποτέλεσμα να το αντιλαμβάνεστε και να είναι ταχύτερο.

Λάβετε υπόψη ότι η μείωση της ανταλλαγής μπορεί να οδηγήσει σε σφάλματα και διαδικασίες που θα σκοτωθούν τυχαία από το σύστημα, προκειμένου να ελευθερωθεί η μνήμη. Η μείωση της ανταλλαγής θα είναι καλύτερη αν διαθέτετε αρκετή μνήμη RAM για την ομαλή λειτουργία του συστήματός σας. Αλλά θα πρέπει να διατηρήσετε την τιμή πάνω από "10", καθώς κάποια χρησιμότητα ανταλλαγής είναι καλή.

Αύξηση της ανταλλαγής

Η αύξηση της ανταλλαγής μπορεί να έχει το γενικό πλεονέκτημα της επιτάχυνσης των εισόδων / εξόδων. Παρόλο που δεν συνιστάται συχνά, η αύξηση της ανταλλαγής θα μπορούσε να είναι χρήσιμη αν:

  • Εκτελείτε ορισμένες εντατικές λειτουργίες εισόδου / εξόδου και έχετε αργούς, παλιούς σκληρούς δίσκους . Για παράδειγμα, η εκτέλεση αντιγράφων ασφαλείας ή επεξεργασίας εικόνων κατά παρτίδες μπορεί να είναι εντατική I / O (Μια αξιοσημείωτη εξαίρεση είναι οι βάσεις δεδομένων που είναι φυσικά I / O εντατικές αλλά θα μπορούσαν να επωφεληθούν από χαμηλότερη τιμή swappiness όπως φαίνεται παραπάνω).
  • Έχετε χαμηλή μνήμη αλλά έχετε σχετικά γρήγορους δίσκους. Σε αυτό το απίθανο σενάριο, μια υψηλότερη τιμή swappiness μπορεί να βοηθήσει να χειριστεί μνήμη πιο αποτελεσματικά (αν και η ρύθμιση του είναι πολύ υψηλή μπορεί να βλάψει πάλι την απόδοση.).

Πώς να διαχειριστείτε την εναλλαγή

Πρώτον, θα πρέπει να εξετάσετε εάν πρέπει να αγγίξετε αυτήν την τιμή καθόλου. Αντιμετωπίζετε προβλήματα απόδοσης; Και το πιο σημαντικό, έχετε δοκιμάσει άλλα συστήματα tweaks ακόμα; Αν όχι, ίσως είναι καλύτερο να κοιτάξετε αλλού πρώτα. Αλλά αν έχετε κάποιο συγκεκριμένο σενάριο, ίσως να θέλετε να συνεχίσετε.

Στη συνέχεια, πόσο βαρύ είναι η χρήση της ανταλλαγής σας; Μπορείτε να το βρείτε με οποιοδήποτε εργαλείο παρακολούθησης επιδόσεων της επιλογής σας ή με την free εντολή. free -m θα σας δώσει ένα στιγμιότυπο της χρήσης μνήμης σε megabytes. Για συνεχή παρακολούθηση, μπορεί να θέλετε να χρησιμοποιήσετε το watch.

 watch -n 1 δωρεάν -m 

Αυτό θα εκτελέσει την free -m εντολή free -m κάθε δευτερόλεπτο και θα εκτυπώσει την έξοδο της μέχρι να πατήσετε "Ctrl + C."

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

Τώρα, εάν κάνετε την ανταλλαγή εμπειρίας, μπορεί να σας ενδιαφέρει πόσο ενεργός. Η εντολή vmstat θα σας πει όλα όσα πρέπει να γνωρίζετε για τη χρήση εικονικής μνήμης του συστήματός σας (swap και physical ram together).

 vmstat 1 

Θα πρέπει να ελέγξετε τη στήλη swap όπου το σημαίνει "swap in" και so σημαίνει "swap out". Εάν οι αριθμοί είναι υψηλοί, αυτό σημαίνει πολλή δραστηριότητα ανταλλαγής που αποτελεί ένδειξη για προβλήματα χαμηλής μνήμης. Εάν βλέπετε τη χρήση της ανταλλαγής με free αλλά ελάχιστα ενεργή εναλλαγή, μπορεί να χρειαστεί να τροποποιήσετε την εναλλαγή.

Είναι επίσης καλή ιδέα να ορίσετε άλλα benchmarks επιδόσεων όπως δίσκο εισόδου / εξόδου, μέσο όρο φόρτωσης κ.λπ., έτσι όταν δοκιμάζετε τις νέες τιμές swappiness, έχετε κάτι να συγκρίνετε.

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

 sudo sysctl vm.swappiness = 10 

Φυσικά, μπορείτε να βάλετε οποιαδήποτε τιμή αντί "10" (μεταξύ "0" και "100").

Μόλις βρείτε την προτιμώμενη τιμή σας, μπορείτε να αλλάξετε μόνιμα τη ρύθμιση παραμέτρων του συστήματος, επεξεργάζοντας το αρχείο "/etc/sysctl.conf"

 sudo nano /etc/sysctl.conf 

και την προσθήκη των γραμμών

 #Set τιμή swappiness vm.swappiness = 10 

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

συμπέρασμα

Η μείωση της μετατόπισης σε "10" συνιστάται συχνά ως λύση ενός μεγέθους, αλλά η πραγματική χρήση της τεχνικής μπορεί να είναι λίγο πιο περίπλοκη από αυτή. Δημιουργώντας δείκτες αναφοράς, γνωρίζοντας το σύστημά σας, πώς το χρησιμοποιείτε και τι χρειάζεστε από αυτό, μπορείτε να συντονίσετε τη χρήση της ανταλλαγής και να επιτύχετε κάποια απόδοση (είτε διαδραστικότητα είτε I / O).