Η μνήμη είναι ο πόρος που καθορίζει συχνότερα το μέγεθος ενός διακομιστή: είναι αυτή που τελειώνει πρώτη, και όταν τελειώσει, ο διακομιστής δεν επιβραδύνεται, σταματά υπηρεσίες. Ο οδηγός αυτός δίνει τον κανόνα υπολογισμού, τι καταναλώνει κάθε κομμάτι μιας εφαρμογής, τυπικά προφίλ και τον τρόπο να μετρήσετε έναν διακομιστή που ήδη λειτουργεί.
available του free -h, όχι τη στήλη free.Ένας διακομιστής δεν καταναλώνει μνήμη «γενικά»: κάθε πρόγραμμα που τρέχει κρατά ένα μέρος της, όσο τρέχει. Ο υπολογισμός ξεκινά λοιπόν από τη λίστα των διεργασιών που είναι μόνιμα παρούσες, και έπειτα προσθέτει την αιχμή και ένα περιθώριο:
Μνήμη που χρειάζεται = (σύστημα + μόνιμες υπηρεσίες + αιχμή των περιστασιακών εργασιών) × 1,25
Οι τάξεις μεγέθους που ακολουθούν ισχύουν για μια εφαρμογή συνηθισμένου μεγέθους, μετρημένη σε παραγωγή. Δίνουν ένα σημείο εκκίνησης. Η μέτρηση στη δική σας εφαρμογή, που περιγράφεται παρακάτω, έχει πάντα τον τελευταίο λόγο.
| Στοιχείο | Τυπική μνήμη | Τι την κάνει να μεταβάλλεται |
|---|---|---|
| Nginx, Caddy (διακομιστής web, proxy) | 10 έως 50 MB | Σχεδόν σταθερή: ο αριθμός των συνδέσεων μετρά ελάχιστα. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 έως 80 MB ανά διεργασία | Ο αριθμός των διεργασιών, με ανώτατο όριο το pm.max_children: 10 διεργασίες, 400 έως 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 έως 300 MB ανά διεργασία | Ο αριθμός των διεργασιών (λειτουργία cluster, PM2) και το μέγεθος του heap, με όριο το --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 έως 200 MB ανά διεργασία | Ο αριθμός των workers του Gunicorn ή του Uvicorn, και οι βιβλιοθήκες που φορτώνονται: το pandas ή ένα μοντέλο μηχανικής μάθησης προσθέτουν εκατοντάδες MB. |
| Java (Spring Boot) | 300 MB έως 1 GB ανά εφαρμογή | Το μέγιστο μέγεθος του heap: εξ ορισμού, η JVM δεσμεύει το ένα τέταρτο της μνήμης που βλέπει. |
| Go, Rust | 10 έως 100 MB | Τα δεδομένα που η ίδια η εφαρμογή κρατά στη μνήμη. |
| PostgreSQL | 25 % της μνήμης για το shared_buffers, συν μερικά MB ανά σύνδεση | Ο όγκος των δεδομένων που διαβάζονται συχνά, ο αριθμός των συνδέσεων, το work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, 128 MB εξ ορισμού | Σε διακομιστή αφιερωμένο στη βάση, αυτό το buffer παίρνει συχνά έως και το 80 % της μνήμης. |
| Redis | Το μέγεθος των δεδομένων, συν τις δομές του | Κατά την αποθήκευση στον δίσκο, οι σελίδες που τροποποιούνται διπλασιάζονται: έως και η διπλάσια μνήμη στη χειρότερη περίπτωση. |
| Elasticsearch, OpenSearch | Τουλάχιστον 2 GB για το heap | Το heap δεν ξεπερνά το μισό της μνήμης: το υπόλοιπο χρησιμεύει ως cache αρχείων. |
Μια αιχμή επανέρχεται συχνά στις εφαρμογές JavaScript: η μεταγλώττιση (build). Το npm run build σε ένα έργο Next.js, Nuxt ή Angular ζητά συχνά 1 έως 2 GB μόνο του, για λίγα λεπτά, πέρα από ό,τι ήδη τρέχει. Αν κάνετε τη μεταγλώττιση στον διακομιστή, τον διαστασιολογείτε για αυτή την αιχμή. Αν την κάνετε στον υπολογιστή σας ή στη συνεχή ενοποίηση (CI) και ανεβάζετε μόνο το αποτέλεσμα, την αποφεύγετε.
Ο ίδιος συλλογισμός ισχύει για τα κοντέινερ Docker: κάθε κοντέινερ είναι ένα σύνολο διεργασιών όπως όλες οι άλλες, και ο daemon του Docker προσθέτει τη δική του κατανάλωση. Το docker stats δείχνει πόση μνήμη παίρνει το καθένα.
Τα προφίλ αυτά αθροίζουν τα παραπάνω στοιχεία, μαζί με την αιχμή και το περιθώριο. Προϋποθέτουν μια εφαρμογή συνηθισμένου μεγέθους και την κίνηση των πρώτων ημερών λειτουργίας. Μια ογκώδης βάση ή σταθερά υψηλή κίνηση ανεβάζουν τον αριθμό.
| Τι τρέχει στον διακομιστή | Μνήμη που χρειάζεται |
|---|---|
| Στατική ιστοσελίδα, proxy, μικρό bot ή προγραμματισμένο script | 1 έως 2 GB |
| Μία ιστοσελίδα WordPress με MariaDB και cache σελίδων | 2 GB |
| Ένα ηλεκτρονικό κατάστημα WooCommerce, ή πολλές ιστοσελίδες WordPress | 4 GB |
| Ένα API σε Node.js ή Python με PostgreSQL, πρώτοι χρήστες | 4 GB |
| Μια εφαρμογή Next.js που μεταγλωττίζεται στον διακομιστή, με το API της και τη βάση PostgreSQL της | 6 έως 8 GB |
| Πολλές εφαρμογές σε κοντέινερ, προπαραγωγή και παραγωγή | 8 GB |
| Μια βάση δεδομένων αρκετών δεκάδων GB, με εντατική χρήση | 16 GB και άνω |
| Ένα γλωσσικό μοντέλο 7 έως 8 δισεκατομμυρίων παραμέτρων που εκτελείται στον διακομιστή | 16 GB |
Μια εφαρμογή που καλεί ένα μοντέλο AI μέσω API (OpenAI, Anthropic, Mistral) διαστασιολογείται όπως κάθε εφαρμογή web: το μοντέλο τρέχει στον πάροχό του, και ο δικός σας διακομιστής περιμένει την απάντηση. Η εκτέλεση του μοντέλου στον ίδιο τον διακομιστή είναι αυτή που αλλάζει την κλίμακα.
Σε έναν διακομιστή σε λειτουργία, η μέτρηση αντικαθιστά την εκτίμηση. Τρεις εντολές δείχνουν πού βρίσκεστε:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: διαβάστε τη στήλη available, τη μνήμη που είναι πραγματικά διαθέσιμη για να ξεκινήσουν νέα προγράμματα. Η στήλη free είναι σχεδόν πάντα χαμηλή, και αυτό είναι φυσιολογικό: το Linux γεμίζει την αχρησιμοποίητη μνήμη με cache αρχείων (buff/cache), την οποία αποδίδει μόλις τη χρειαστεί ένα πρόγραμμα.ps aux --sort=-rss: οι διεργασίες ταξινομημένες κατά τη μνήμη που καταλαμβάνουν (στήλη RSS, σε kilobyte). Εδώ βλέπετε πόσο ζυγίζει κάθε worker PHP ή Node.js.vmstat 5 5: πέντε μετρήσεις ανά πέντε δευτερόλεπτα. Μη μηδενικές τιμές στις στήλες si και so, μέτρηση μετά από μέτρηση, δείχνουν διακομιστή που ανταλλάσσει δεδομένα με το swap: του λείπει μνήμη.Μετρήστε την πιο φορτωμένη ώρα της ημέρας, και κατά τη διάρκεια των περιστασιακών εργασιών: μεταγλώττιση, αντίγραφο ασφαλείας, εισαγωγή δεδομένων. Αυτό που μετράει είναι η αιχμή.
Ένας διακομιστής που μένει χωρίς μνήμη δεν επιβραδύνεται σταδιακά. Όταν δεν απομένει τίποτα να αποδεσμευτεί, ο πυρήνας του Linux ενεργοποιεί τον OOM killer (out of memory): επιλέγει μια διεργασία, συνήθως αυτή που καταλαμβάνει την περισσότερη μνήμη, και τη σταματά αμέσως. Σε έναν διακομιστή εφαρμογών, αυτή είναι συχνά η βάση δεδομένων.
Τα συμπτώματα: σφάλματα 502 ή 503 κατά διαστήματα, μια υπηρεσία που επανεκκινείται χωρίς φανερό λόγο, μια μεταγλώττιση που διακόπτεται με Killed. Τα αρχεία καταγραφής το επιβεβαιώνουν:
journalctl -k | grep -i "out of memory"
systemctl status onoma-ypiresias
Στην έξοδο του systemctl status, η ένδειξη Failed with result 'oom-kill' σημαίνει ότι η υπηρεσία σταμάτησε λόγω έλλειψης μνήμης.
Το swap, όταν ο διακομιστής το διαθέτει, καθυστερεί αυτή τη στιγμή μεταφέροντας στον δίσκο τη μνήμη που χρησιμοποιείται λιγότερο. Χρησιμεύει ως δίχτυ ασφαλείας, όχι ως χωρητικότητα: ένας διακομιστής που στηρίζεται συνεχώς στο swap απαντά πολλές φορές πιο αργά, ακόμη και σε NVMe SSD.
Οι λύσεις, από την πιο απλή στην πιο μόνιμη: λιγότερες διεργασίες της εφαρμογής (pm.max_children, workers του Gunicorn), μεταγλώττιση εκτός διακομιστή, όριο στη μνήμη της βάσης δεδομένων, και έπειτα μετάβαση σε μεγαλύτερο μέγεθος.
Η μνήμη δεν είναι ο μόνος πόρος: ο επεξεργαστής μετράει για ό,τι υπολογίζει (μεταγλώττιση, επεξεργασία εικόνων, εκτέλεση μοντέλου AI), ο δίσκος για τη βάση δεδομένων και τα αρχεία. Για μια εφαρμογή web, όμως, σχεδόν πάντα η μνήμη είναι αυτή που καθορίζει το μέγεθος.
Το VPS Pro διατίθεται σε έξι μεγέθη, σε επεξεργαστές Intel Xeon, μνήμη ECC και NVMe SSD σε κατοπτρισμό, και περνά στο επόμενο μέγεθος οποιαδήποτε στιγμή, χωρίς επανεγκατάσταση. Η Ολοκληρωμένη υποστήριξη περιλαμβάνεται: περιγράψτε μας τι θα τρέχει ο διακομιστής σας και σας προτείνουμε το μέγεθος, και έπειτα, σε κάθε ερώτηση, κάνουμε τη διάγνωση και σας λέμε τι να κάνετε, από το σύστημα έως τον κώδικα της εφαρμογής σας.
Μια στατική ιστοσελίδα, ένα proxy ή ένα μικρό script τρέχουν σε 1 έως 2 GB. Μόλις μια βάση δεδομένων και μια εφαρμογή (PHP, Node.js, Python) μοιράζονται τον διακομιστή, υπολογίστε 2 GB για μια ιστοσελίδα WordPress και 4 GB για μια εφαρμογή κατά παραγγελία με PostgreSQL.
2 GB για μία ιστοσελίδα με MariaDB και cache σελίδων, 4 GB για ένα κατάστημα WooCommerce ή πολλές ιστοσελίδες. Ο αριθμός των διεργασιών PHP-FPM είναι η πρώτη ρύθμιση: καθεμία καταλαμβάνει 40 έως 80 MB.
Όχι. Το swap αποτρέπει ένα απότομο σταμάτημα όταν η μνήμη γεμίσει, αλλά ένας διακομιστής που το χρησιμοποιεί συνεχώς απαντά πολλές φορές πιο αργά, ακόμη και σε NVMe SSD. Είναι δίχτυ ασφαλείας. Το μέγεθος επιλέγεται με βάση τη μνήμη.
Επειδή το Linux χρησιμοποιεί την αχρησιμοποίητη μνήμη ως cache αρχείων. Αυτή η cache αποδεσμεύεται μόλις ένα πρόγραμμα χρειαστεί μνήμη. Η στήλη που πρέπει να διαβάσετε είναι η available, που δείχνει τη μνήμη που είναι πραγματικά διαθέσιμη.
Υπολογίστε 1 έως 2 GB μόνο για τη μεταγλώττιση, πέρα από ό,τι ήδη τρέχει στον διακομιστή. Αν κάνετε τη μεταγλώττιση στον υπολογιστή σας ή στη συνεχή ενοποίηση (CI) και ανεβάζετε μόνο το αποτέλεσμα, αποφεύγετε αυτή την αιχμή.
Simafri
Ας μιλήσουμε για την ιστοσελίδα σας
Πείτε μας με λίγα λόγια για το έργο σας: θα επικοινωνήσουμε σύντομα μαζί σας.
Ευχαριστούμε! Το αίτημά σας εστάλη. Θα επικοινωνήσουμε σύντομα μαζί σας.
Προτιμάτε email; Γράψτε μας στο support@simafri.com.