Πόσους ταυτόχρονους χρήστες αντέχει ένα VPS: κάντε τον υπολογισμό

Όλα ξεκινούν από ένα ερώτημα: τι κάνουν αυτοί οι χρήστες; Χίλια άτομα συνδεδεμένα σε μια εφαρμογή δεν κάνουν χίλια αιτήματα το δευτερόλεπτο, και μια σελίδα που εξυπηρετείται από cache κοστίζει εκατό φορές λιγότερο από μια σελίδα που υπολογίζεται. Ο οδηγός αυτός μετατρέπει τους χρήστες σε αιτήματα, τα αιτήματα σε επεξεργαστή και μνήμη, και έπειτα δείχνει πώς να το επαληθεύσετε με μια δοκιμή φορτίου.

Δημοσιεύθηκε στις 26 Οκτωβρίου 2026 Συντάκτης: Χρόνος ανάγνωσης: 9 λεπτά

Όλοι οι οδηγοί

Με μια ματιά

  1. Οι συνδεδεμένοι χρήστες δεν ισοδυναμούν με ταυτόχρονα αιτήματα:ένας ενεργός χρήστης στέλνει ένα αίτημα περίπου κάθε 10 έως 30 δευτερόλεπτα.
  2. Αιτήματα σε εξέλιξη = αιτήματα ανά δευτερόλεπτο × διάρκεια ενός αιτήματος (νόμος του Little). Αυτόν τον αριθμό πρέπει να αντέξει ο διακομιστής.
  3. Ένα vCPU εξυπηρετεί το πολύ 1.000 ÷ (χιλιοστά του δευτερολέπτου υπολογισμού ανά αίτημα) αιτήματα το δευτερόλεπτο: 20 ms υπολογισμού, 50 αιτήματα το δευτερόλεπτο.
  4. Η μνήμη περιορίζει τον αριθμό των workers: κάθε διεργασία PHP ή Python καταλαμβάνει 40 έως 200 MB.
  5. Η cache αλλάζει τα πάντα: μια σελίδα από cache κοστίζει λιγότερο από ένα χιλιοστό του δευτερολέπτου, μια σελίδα WordPress που υπολογίζεται 100 έως 300.
  6. Μετρήστε με μια δοκιμή φορτίου (k6, wrk) σε ένα αντίγραφο της εφαρμογής, ανεβάζοντας το φορτίο σταδιακά.

Από τους χρήστες στα αιτήματα

Οι «ταυτόχρονοι χρήστες» σημαίνουν τρία διαφορετικά μεγέθη, ανάλογα με το ποιος μιλά:

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

Παράδειγμα. 600 ενεργοί χρήστες την ίδια στιγμή, που ο καθένας στέλνει ένα αίτημα κάθε 20 δευτερόλεπτα, κάνουν 30 αιτήματα το δευτερόλεπτο. Αν κάθε αίτημα διαρκεί 100 ms, ο διακομιστής έχει κατά μέσο όρο μόλις 3 αιτήματα σε εξέλιξη. Το διακύβευμα βρίσκεται αλλού: στις αιχμές και στα αργά αιτήματα.

Τι αντέχει ένα vCPU

Ένα αίτημα απασχολεί τον επεξεργαστή όσο διαρκεί ο υπολογισμός του: εκτέλεση του κώδικα, ερώτημα στη βάση, κατασκευή της απάντησης. Ένα vCPU επεξεργάζεται λοιπόν το πολύ 1.000 ÷ t αιτήματα το δευτερόλεπτο, όπου t είναι ο χρόνος υπολογισμού ενός αιτήματος σε χιλιοστά του δευτερολέπτου. Ο χρόνος αναμονής (ένα εξωτερικό API, ένας δίσκος) δεν απασχολεί τον επεξεργαστή, απασχολεί όμως έναν worker.

Είδος αιτήματοςΤυπικός χρόνος υπολογισμούΑνά vCPU, τάξη μεγέθους
Στατικό αρχείο, ή σελίδα από cacheΚάτω από 1 msΑρκετές χιλιάδες αιτήματα το δευτερόλεπτο
Σελίδα WordPress από cache σελίδων1 έως 5 msΑρκετές εκατοντάδες το δευτερόλεπτο
API JSON (Node.js, Go, FastAPI) με ένα ερώτημα SQL σε ευρετήριο5 έως 20 ms50 έως 200 το δευτερόλεπτο
Σελίδα WordPress ή Laravel που υπολογίζεται σε κάθε επίσκεψη100 έως 300 ms3 έως 10 το δευτερόλεπτο
Αναφορά, εξαγωγή, δημιουργία PDF500 ms έως αρκετά δευτερόλεπταΛιγότερα από 2 το δευτερόλεπτο

Με αυτές τις τάξεις μεγέθους, 30 αιτήματα API το δευτερόλεπτο με 10 ms υπολογισμού απασχολούν το 30 % ενός μόνο vCPU. Τα ίδια 30 αιτήματα το δευτερόλεπτο σε σελίδες WordPress χωρίς cache ζητούν 3 έως 9 vCPU. Η cache σελίδων υπάρχει ακριβώς για να μεταφέρει μια σελίδα από την τέταρτη γραμμή του πίνακα στη δεύτερη.

Τι αντέχει η μνήμη

Κάθε αίτημα σε εξέλιξη το αναλαμβάνει ένας worker, και οι workers καταλαμβάνουν μνήμη, είτε δουλεύουν είτε όχι. Συχνά η μνήμη, περισσότερο από τον επεξεργαστή, καθορίζει πόσα αιτήματα επεξεργάζονται παράλληλα:

Οι μόνιμες συνδέσεις (websockets, ειδοποιήσεις σε πραγματικό χρόνο) μετρούν χωριστά: ανοιχτές διαρκώς, καταναλώνουν λίγο επεξεργαστή και μερικές δεκάδες kilobyte μνήμης η καθεμία. Ένας διακομιστής Node.js κρατά χιλιάδες από αυτές σε μερικές εκατοντάδες MB.

Τα πραγματικά σημεία συμφόρησης

Σε μια πραγματική εφαρμογή, ο διακομιστής σπάνια φτάνει στον κορεσμό εκεί που το περιμένει κανείς. Οι πιο συχνές αιτίες, με τη σειρά που αξίζει να τις αναζητήσετε:

  1. Ένα αργό ερώτημα SQL: ένα ευρετήριο που λείπει μετατρέπει ένα ερώτημα 2 ms σε ερώτημα 2 δευτερολέπτων, που δεσμεύει έναν worker και μια σύνδεση. Το pg_stat_statements στην PostgreSQL, ή το αρχείο αργών ερωτημάτων της MySQL, το εντοπίζει.
  2. Τα ερωτήματα σε αλυσίδα (το πρόβλημα N+1): μια σελίδα που στέλνει ένα ερώτημα για κάθε γραμμή που εμφανίζει στέλνει εκατοντάδες.
  3. Μια σύγχρονη εξωτερική κλήση: ένα API πληρωμών ή AI που απαντά σε 3 δευτερόλεπτα μπλοκάρει έναν σύγχρονο worker για 3 δευτερόλεπτα.
  4. Βαριές επεξεργασίες μέσα στο αίτημα: αποστολή email, αλλαγή μεγέθους εικόνων, δημιουργία PDF, που αξίζει να μεταφερθούν σε μια ουρά εργασιών.
  5. Η απουσία cache: οι σελίδες που είναι ίδιες για όλους τους επισκέπτες εξυπηρετούνται από cache, και τα στατικά αρχεία από τον διακομιστή web.

Η επαλήθευση: η δοκιμή φορτίου

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

Τερματικό: 50 συνδέσεις για 30 δευτερόλεπτα, με το wrk
wrk -t2 -c50 -d30s --latency https://preprod.i-istoselida-sas.com/

Για μια πλήρη διαδρομή (σύνδεση, περιήγηση, αναζήτηση), το k6 περιγράφει ένα σενάριο σε JavaScript και ανεβάζει το φορτίο σταδιακά:

Script k6 (test.js), που εκτελείται με: k6 run test.js
import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 100 },
    { duration: '5m', target: 100 },
    { duration: '2m', target: 300 },
    { duration: '5m', target: 300 },
    { duration: '2m', target: 0 },
  ],
  thresholds: { http_req_duration: ['p(95)<500'] },
};

export default function () {
  http.get('https://preprod.i-istoselida-sas.com/');
  sleep(15);
}

Όταν το φορτίο μεγαλώνει

Η σειρά που κοστίζει λιγότερο και αποδίδει περισσότερο:

  1. Βάλτε σε cache ό,τι μπορεί να μπει (σελίδες, τμήματα σελίδων, αποτελέσματα ερωτημάτων) και διορθώστε τα αργά ερωτήματα.
  2. Ρυθμίστε τον αριθμό των workers ανάλογα με τη διαθέσιμη μνήμη και τον επεξεργαστή.
  3. Περάστε σε μεγαλύτερο μέγεθος: περισσότερα vCPU και περισσότερη μνήμη, χωρίς καμία αλλαγή στην εφαρμογή.
  4. Μεταφέρετε τη βάση δεδομένων στον δικό της διακομιστή.
  5. Κατανείμετε την εφαρμογή σε πολλούς διακομιστές πίσω από έναν εξισορροπητή φορτίου (load balancer).

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

Ένας διακομιστής που μεγαλώνει μαζί με τους χρήστες σας

Το VPS Pro διατίθεται σε έξι μεγέθη, σε επεξεργαστές Intel Xeon, μνήμη ECC και NVMe SSD σε κατοπτρισμό, και περνά στο επόμενο μέγεθος οποιαδήποτε στιγμή, χωρίς επανεγκατάσταση. Η Ολοκληρωμένη υποστήριξη περιλαμβάνεται: πείτε μας πόσους χρήστες περιμένετε στην έναρξη και σε έναν χρόνο, και σας προτείνουμε το μέγεθος. Και όταν μια σελίδα επιβραδύνεται, κάνουμε τη διάγνωση και σας λέμε τι να κάνετε, από το σύστημα έως τον κώδικα της εφαρμογής σας.

Ανακαλύψτε τα VPS Pro

Συχνές ερωτήσεις

Πόσους χρήστες αντέχει ένα VPS με 2 vCPU και 4 GB;

Για ένα API ή μια εφαρμογή της οποίας τα αιτήματα χρειάζονται 10 έως 20 ms υπολογισμού, αρκετές εκατοντάδες ενεργούς χρήστες την ίδια στιγμή. Για μια ιστοσελίδα WordPress χωρίς cache σελίδων, περίπου εκατό. Η διαφορά οφείλεται στον χρόνο υπολογισμού κάθε αιτήματος και στην cache, και γι’ αυτό αξίζει μια δοκιμή φορτίου.

Πόσους επισκέπτες την ημέρα μπορεί να δεχτεί ένα VPS;

Ο αριθμός επισκεπτών ανά ημέρα λέει λίγα: αυτό που μετράει είναι η αιχμή. Για να περάσετε από το ένα στο άλλο, διαιρέστε τις επισκέψεις της ημέρας με τις ώρες δραστηριότητας, πολλαπλασιάστε με τις σελίδες ανά επίσκεψη, και έπειτα με έναν συντελεστή αιχμής από 3 έως 5. 10.000 επισκέψεις σε 10 ώρες, με 4 σελίδες η καθεμία, δίνουν περίπου 1 σελίδα το δευτερόλεπτο κατά μέσο όρο, και 3 έως 5 στην αιχμή.

Πώς καταλαβαίνω αν ο διακομιστής μου έχει φτάσει στον κορεσμό;

Τρία σημάδια: ο χρόνος απόκρισης ανεβαίνει μαζί με την κίνηση, ο επεξεργαστής μένει πάνω από 80 % τις ώρες αιχμής, ή η διαθέσιμη μνήμη πέφτει κοντά στο μηδέν. Τα αρχεία καταγραφής του διακομιστή web δείχνουν τότε σφάλματα 502 ή 504, και τα αιτήματα περιμένουν έναν ελεύθερο worker.

Αλλάζουν τα websockets τον υπολογισμό;

Ναι: μια σύνδεση websocket μένει ανοιχτή διαρκώς. Καταναλώνει λίγο επεξεργαστή και μερικές δεκάδες kilobyte μνήμης. Ένας διακομιστής Node.js κρατά χιλιάδες από αυτές. Τα μηνύματα που αποστέλλονται, περισσότερο από τις ανοιχτές συνδέσεις, είναι αυτά που φορτώνουν τον επεξεργαστή.

Επικοινωνήστε μαζί μας