Sobes.tech
Middle

Wat te doen als er een fout optreedt bij het werken met nginx wanneer meer dan 1024 verbindingen worden overschreden?

sobes.tech AI

Antwoord van AI

Dit duidt op een beperking in het aantal geopende bestandsdescriptoren.

Oplossingen:

  1. Verhoog worker_connections in de Nginx-configuratie:

    // Verhoog het maximale aantal verbindingen per worker-proces
    events {
        worker_connections 4096; // of meer, afhankelijk van de behoeften en bronnen
    }
    
  2. Verhoog de limiet van geopende bestanden op systeemniveau:

    • Voor de huidige gebruikerssessie:
      # Tijdelijk verhogen van de limiet van geopende bestanden
      ulimit -n 65536
      
    • Voor het hele systeem (permanent): Bewerk het bestand /etc/security/limits.conf. Voeg regels toe:
      # Gebruikersspecifieke limieten
      nginx soft nofile 65536
      nginx hard nofile 65536
      
      # Alternatief, voor alle gebruikers
      # * soft nofile 65536
      # * hard nofile 65536
      
      (Vervang nginx door de gebruikersnaam waaronder Nginx draait, indien anders.) Het is nodig om het systeem opnieuw op te starten of opnieuw in te loggen om de wijzigingen toe te passen, of voer sysctl -p uit.
  3. Controleer globale kernel-instellingen: Zorg dat fs.file-max hoog genoeg is.

    # Controleer de huidige waarde
    cat /proc/sys/fs/file-max
    # Stel een nieuwe waarde in (tijdelijk)
    # sudo sysctl -w fs.file-max=100000
    # Stel een nieuwe waarde in (permanent) - bewerk /etc/sysctl.conf
    # Voeg de regel toe: fs.file-max = 100000
    # Pas de wijzigingen toe
    # sudo sysctl -p
    
  4. Zorg dat de Nginx-gebruiker toestemming heeft om zoveel bestanden te openen: Controleer onder welke gebruiker Nginx draait en welke limieten voor die gebruiker zijn ingesteld. Dit is gerelateerd aan punt 2.

  5. Herstart Nginx: Na het aanbrengen van wijzigingen in de Nginx-configuratie of systeemlimieten, moet je Nginx herstarten.

    # Herlaad Nginx
    sudo systemctl reload nginx
    # Of, als dat niet helpt
    # sudo systemctl restart nginx
    

Prioriteit in de oplossing:

  1. Controleer en verhoog worker_connections.
  2. Controleer en verhoog de limieten van bestandsdescriptoren voor de Nginx-gebruiker.
  3. Controleer en verhoog de globale limiet fs.file-max.
  4. Herstart Nginx.

Het is belangrijk om te onthouden dat het verhogen van limieten gerechtvaardigd moet zijn en in overeenstemming met de beschikbare bronnen van de server (geheugen, CPU). Te hoge waarden kunnen leiden tot instabiliteit van het systeem.