Ο server μου έγινε αργός: πώς ελέγχετε RAM, CPU και δίσκο
Αν ο server σας επιβραδύνθηκε, κοιτάξτε τρία πράγματα: RAM, CPU και δίσκο. Συνδεθείτε και εκτελέστε τρεις εντολές: free -h για τη μνήμη, top για τον επεξεργαστή και df -h για τον δίσκο. Όποιο είναι γεμάτο είναι το σημείο συμφόρησης. Αν και τα τρία φαίνονται εντάξει, το πρόβλημα βρίσκεται συνήθως στην ίδια την εφαρμογή.
Ξεκινήστε από το φορτίο
Το load average είναι ο μέσος αριθμός διεργασιών που περιμένουν την CPU ή τον δίσκο. Οι τρεις πρώτοι αριθμοί στο παρακάτω αποτέλεσμα είναι οι μέσοι όροι του τελευταίου 1, 5 και 15 λεπτού. Συγκρίνετέ τους με τον αριθμό των πυρήνων σας:
cat /proc/loadavg
nproc
Αν το φορτίο μένει πάνω από τον αριθμό των πυρήνων για πολύ ώρα, ο server δεν προλαβαίνει τη δουλειά του.
RAM: free -h
free -h
Η σημαντικότερη στήλη είναι η available. Αν είναι πολύ μικρή και η γραμμή Swap γεμίζει, έχετε εξαντλήσει τη RAM. Όταν τελειώνει η μνήμη, ο πυρήνας τερματίζει μία από τις διεργασίες που χρησιμοποιούν την περισσότερη μνήμη (OOM killer). Μια βάση δεδομένων ή εφαρμογή web που κλείνει μόνη της είναι συχνά ένδειξη αυτού. Ελέγξτε ως εξής:
sudo dmesg -T | grep -i -E "out of memory|killed process"
CPU: top
top
Στην οθόνη που ανοίγει, το πλήκτρο P ταξινομεί τις διεργασίες κατά χρήση CPU και το M κατά χρήση μνήμης. Πατήστε q για έξοδο. Στη γραμμή CPU στην κορυφή, δείτε τα εξής:
- us: το μερίδιο των διεργασιών χρήστη. Αν είναι υψηλό, μια εφαρμογή καταναλώνει την CPU.
- wa: χρόνος αναμονής για είσοδο και έξοδο δίσκου. Αν είναι υψηλός, το πρόβλημα δεν είναι η CPU αλλά ο δίσκος.
- st: χρόνος που «κλέβεται» από τον εικονικό server, δηλαδή χρόνος που το επίπεδο εικονικοποίησης έδωσε την CPU σε κάτι άλλο. Αν μένει υψηλός, το πρόβλημα μπορεί να μην είναι μέσα στον server σας. Σε αυτή την περίπτωση, επικοινωνήστε με την υποστήριξη.
Δίσκος: df -h
df -h
df -i
Η πρώτη εντολή δείχνει τον χώρο που χρησιμοποιείται και η δεύτερη το όριο του αριθμού αρχείων (inodes). Όταν ο δίσκος γεμίσει εντελώς, οι βάσεις δεδομένων και οι εφαρμογές δεν μπορούν να γράψουν και ο server επιβραδύνεται ή βγάζει σφάλματα. Βρείτε τι πιάνει τον χώρο:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h | tail -n 8
Αν τα αρχεία καταγραφής του συστήματος έχουν μεγαλώσει, μπορείτε να τα μικρύνετε με sudo journalctl --vacuum-size=200M. Αν χρησιμοποιείτε Docker, το docker system df δείχνει τον χώρο που χρησιμοποιούν οι εικόνες και τα containers, και το docker stats --no-stream δείχνει πόση CPU και μνήμη χρησιμοποιεί κάθε container.
Σύμπτωμα, πιθανή αιτία και διόρθωση
| Σύμπτωμα | Πιθανή αιτία | Τι πρέπει να κάνετε |
|---|---|---|
| Οι σελίδες είναι αργές κατά διαστήματα, το available είναι χαμηλό, το swap είναι γεμάτο | Δεν αρκεί η RAM | Σταματήστε υπηρεσίες που δεν χρειάζεστε και περιορίστε τις ρυθμίσεις μνήμης της εφαρμογής (για παράδειγμα τον αριθμό των workers του PHP-FPM ή τη μνήμη της βάσης). Αν δεν αρκεί, αναβαθμίστε τον server. |
Μια υπηρεσία κλείνει μόνη της, το «killed process» εμφανίζεται στο αποτέλεσμα του dmesg | Η μνήμη τελείωσε και επενέβη ο OOM killer | Προσθέστε RAM ή μειώστε τη χρήση μνήμης. |
Μία διεργασία στο top κρατά έναν ολόκληρο πυρήνα πλήρως απασχολημένο | Μια κολλημένη διεργασία, ένα προβληματικό πρόσθετο ή ένας βρόχος | Βρείτε τη διεργασία και μετά διορθώστε ή απενεργοποιήστε την εφαρμογή ή το πρόσθετο που βρίσκεται πίσω της. |
| Το φορτίο είναι υψηλό, η CPU αδρανεί, το wa είναι υψηλό | Περιμένει ο δίσκος (βαριές εγγραφές ή swap) | Δείτε τις στήλες si και so στο vmstat 1 5. Αν χρησιμοποιείται swap, προσθέστε RAM. |
Το df -h ή το df -i είναι γεμάτο | Τέλος χώρου στον δίσκο ή στα inodes | Καθαρίστε μεγάλα αρχεία και αρχεία καταγραφής. Αν συνεχίσει να γεμίζει, αναβαθμίστε. |
| Το st μένει υψηλό | Το πρόβλημα μπορεί να είναι εκτός του server σας | Επικοινωνήστε με την υποστήριξη. |
Στο Seturack η ταχύτητα δίσκου κάθε server έχει όριο: σταθερά 500 MB/s και 20.000 IOPS για αναγνώσεις, και 200 MB/s και 8.000 IOPS για εγγραφές. Αν οι τιμές σας στο αποτέλεσμα του iostat -x 1 5 κινούνται σε αυτούς τους αριθμούς, το φορτίο του δίσκου είναι αυτό που σας επιβραδύνει. Μειώστε τη δουλειά με caching ή απλώστε την στον χρόνο. Αν λείπει το iostat, εγκαταστήστε το με sudo apt install -y sysstat.
Πότε βοηθά το swap;
Το swap χρησιμοποιεί τον δίσκο στη θέση της RAM. Επιτρέπει στον server να αντέξει σύντομες αιχμές μνήμης χωρίς τον OOM killer, αλλά δεν είναι τόσο γρήγορο όσο η RAM. Αν τα si και so στο αποτέλεσμα του vmstat 1 5 μένουν πάνω από το μηδέν, ο server γράφει συνεχώς στο swap. Η λύση είναι RAM και όχι swap. Αν δεν έχετε swap (το swapon --show δεν τυπώνει τίποτα) και θέλετε να εξομαλύνετε τις αιχμές, μπορείτε να προσθέσετε ένα αρχείο swap 2 GB. Αυτές οι εντολές είναι για σύστημα αρχείων ext4:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Αν οι πόροι φαίνονται εντάξει
Αν η RAM, η CPU και ο δίσκος φαίνονται άνετα, ελέγξτε το όνομα της κορυφαίας διεργασίας στο top:
- Αν στην κορυφή βρίσκεται το
php-fpm, τοapache2ή τοnginx, το πρόβλημα είναι συνήθως ο ίδιος ο ιστότοπος: ένα βαρύ πρόσθετο, έλλειψη caching ή ξαφνική αύξηση επισκεπτών. - Αν στην κορυφή βρίσκεται το
mysqldή τοmariadbd, υπάρχουν αργά ερωτήματα. Ενεργοποιήστε το slow query log της βάσης και δείτε ποια ερωτήματα αργούν. - Αν μια διεργασία που δεν αναγνωρίζετε συνεχίζει να καταναλώνει CPU, ο server μπορεί να έχει παραβιαστεί. Αλλάξτε τους κωδικούς σας, ελέγξτε τις ανοιχτές συνεδρίες και το αποτέλεσμα του
sudo ss -tulpn, και κάντε επανεγκατάσταση του server με καθαρό σύστημα αν χρειαστεί.
Πότε να αναβαθμίσετε
Η σειρά είναι: πρώτα βελτιστοποίηση, μετά caching, κλείστε την περιττή δουλειά. Αν το φορτίο παραμένει υψηλό μετά από αυτά, αναβαθμίστε τον server. Στο πάνελ, ανοίξτε την καρτέλα Μέγεθος του server σας, μετακινήστε τα sliders στο νέο μέγεθος και επιβεβαιώστε. Μετά την πληρωμή, ο server επανεκκινεί μία φορά μόνος του και επιστρέφει στο νέο μέγεθος. Η διεύθυνση IP και τα δεδομένα σας μένουν ίδια και πληρώνετε μόνο τη διαφορά για τις υπόλοιπες ημέρες. Μπορείτε να αυξήσετε RAM, vCores και δίσκο ξεχωριστά, ώστε να ανεβάζετε μόνο ό,τι σας λείπει. Η αναβάθμιση μεγαλώνει τον δίσκο, ενώ η μείωση δεν τον μικραίνει. Για λεπτομέρειες, δείτε το άρθρο για την αναβάθμιση και μείωση.
Αν ο server δεν ανταποκρίνεται καθόλου λόγω φορτίου, το SSH μπορεί να μη συνδεθεί. Σε αυτή την περίπτωση, ανοίξτε την κονσόλα VNC από το πάνελ ή επανεκκινήστε τον server από το πάνελ.
Σχόλια0
Δεν υπάρχουν ακόμη σχόλια
Μοιραστείτε πρώτοι τις σκέψεις σας.
Συνδεθείτε ή εγγραφείτε για να αφήσετε σχόλιο.