Sobes.tech
Middle

Τι να κάνετε αν κατά την εργασία με το nginx προκύψει σφάλμα όταν ξεπερνάτε τις 1024 συνδέσεις;

sobes.tech AI

Απάντηση από AI

Αυτό υποδεικνύει έναν περιορισμό στον αριθμό των ανοιχτών περιγραφέων αρχείων.

Λύσεις:

  1. Αυξήστε το worker_connections στη διαμόρφωση του Nginx:

    // Αυξήστε τον μέγιστο αριθμό συνδέσεων ανά επεξεργαστή εργασίας
    events {
        worker_connections 4096; // ή περισσότερο, ανάλογα με τις ανάγκες και τους πόρους
    }
    
  2. Αυξήστε το όριο των ανοιχτών αρχείων σε επίπεδο λειτουργικού συστήματος:

    • Για την τρέχουσα συνεδρία χρήστη:
      # Προσωρινά αυξήστε το όριο των ανοιχτών αρχείων
      ulimit -n 65536
      
    • Για ολόκληρο το σύστημα (μόνιμα): Επεξεργαστείτε το αρχείο /etc/security/limits.conf. Προσθέστε γραμμές:
      # Ορίσματα συγκεκριμένου χρήστη
      nginx soft nofile 65536
      nginx hard nofile 65536
      
      # Εναλλακτικά, για όλους τους χρήστες
      # * soft nofile 65536
      # * hard nofile 65536
      
      (Αντικαταστήστε το nginx με το όνομα χρήστη που τρέχει το Nginx, αν είναι διαφορετικό.) Είναι απαραίτητο να επανεκκινήσετε το σύστημα ή να κάνετε αποσύνδεση και επανασύνδεση για να εφαρμοστούν οι αλλαγές, ή να εκτελέσετε sysctl -p.
  3. Έλεγχος των παγκόσμιων ρυθμίσεων πυρήνα: Βεβαιωθείτε ότι το fs.file-max είναι αρκετά υψηλό.

    # Ελέγξτε την τρέχουσα τιμή
    cat /proc/sys/fs/file-max
    # Ορίστε μια νέα τιμή (προσωρινά)
    # sudo sysctl -w fs.file-max=100000
    # Ορίστε μια νέα τιμή (μόνιμα) - επεξεργαστείτε το `/etc/sysctl.conf`
    # Προσθέστε τη γραμμή: fs.file-max = 100000
    # Εφαρμόστε τις αλλαγές
    # sudo sysctl -p
    
  4. Βεβαιωθείτε ότι ο χρήστης του Nginx έχει δικαίωμα να ανοίγει τόσα πολλά αρχεία: Ελέγξτε υπό ποιον χρήστη τρέχει το Nginx και ποια όρια έχουν οριστεί για αυτόν. Αυτό σχετίζεται με το σημείο 2.

  5. Επανεκκινήστε το Nginx: Μετά τις αλλαγές στη διαμόρφωση του Nginx ή στα συστημικά όρια, πρέπει να το επανεκκινήσετε.

    # Φόρτωση ξανά του Nginx
    sudo systemctl reload nginx
    # Ή, αν δεν βοηθά
    # sudo systemctl restart nginx
    

Προτεραιότητα στην επίλυση:

  1. Ελέγξτε και αυξήστε το worker_connections.
  2. Ελέγξτε και αυξήστε τα όρια των περιγραφέων αρχείων για τον χρήστη του Nginx.
  3. Ελέγξτε και αυξήστε το παγκόσμιο όριο fs.file-max.
  4. Επανεκκινήστε το Nginx.

Είναι σημαντικό να θυμάστε ότι η αύξηση των ορίων πρέπει να είναι αιτιολογημένη και να σχετίζεται με τους διαθέσιμους πόρους του διακομιστή (μνήμη, CPU). Πολύ υψηλές τιμές μπορεί να οδηγήσουν σε αστάθεια του συστήματος.