In Linux-gebaseerde systemen zoals RELIANOID apparaten, elke netwerkverbinding, socket of geopend bestand verbruikt een bestandsdescriptorHet besturingssysteem legt beperkingen op aan het aantal bestandsdescriptors dat gelijktijdig geopend kan worden om uitputting van systeembronnen te voorkomen.
Als een proces de limiet voor bestandsdescriptors bereikt, kan het geen extra bestanden of sockets meer openen en kan het systeem de volgende foutmelding genereren:
Te veel geopende bestanden
Deze situatie kan de systeemfunctionaliteit beïnvloeden, waardoor services niet meer reageren of geen nieuwe verbindingen meer kunnen maken totdat het betreffende proces of systeem opnieuw is opgestart.
Dit artikel legt uit hoe limieten voor bestandsdescriptors werken in RELIANOID systemen en hoe beheerders deze indien nodig kunnen aanpassen.
Hoe werken bestandsdescriptorlimieten? #
Linux beheert bestandsdescriptors via twee hoofdtypen limieten:
- Systeemwijde limieten
- Limieten per proces
Beide moeten correct geconfigureerd worden om een stabiele werking te garanderen.
Systeemwijde limieten voor bestandsdescriptors #
De Linux-kernel hanteert een globale limiet voor het aantal bestandsdescriptors dat in het hele systeem kan worden toegewezen. Deze waarde wordt bepaald door de kernelparameter: fs.file-max
U kunt de huidige waarde bekijken met:
sysctl fs.file-max
Voorbeelduitvoer:
fs.bestand-max = 1000000
Dit betekent dat het systeem in totaal maximaal één miljoen bestandsdescriptors kan toewijzen. Als deze limiet is bereikt, kunnen er geen nieuwe bestandsdescriptors worden aangemaakt totdat de bestaande zijn vrijgegeven.
Indien nodig kunnen beheerders de waarde tijdelijk verhogen met behulp van:
sysctl -w fs.file-max=2000000
Om de wijziging ook na herstarts te behouden, voegt u de parameter toe aan: /etc/sysctl.conf
Voorbeeld:
fs.bestand-max = 2000000
Pas de configuratie toe met:
sysctl-p
Limieten voor bestandsdescriptors per proces #
Naast de algemene systeemlimiet heeft elk proces ook een eigen limiet voor het aantal geopende bestanden dat het kan verwerken. Deze limiet wordt beheerd met behulp van ulimit.
Je kunt de huidige limiet controleren met:
ulimit -n
Voorbeelduitvoer:
100000
Dit betekent dat één enkel proces tot wel 100,000 bestandsdescriptors kan openen.
Als een proces deze limiet bereikt, genereert het de volgende foutmelding: “Te veel open bestanden” Een foutmelding verschijnt zelfs als de systeemwijde limiet nog beschikbaar is.
Bestandsdescriptorlimieten in RELIANOID #
RELIANOID De services laden hun per-process limieten voor bestandsdescriptors vanuit het volgende configuratiebestand:
/etc/profile/relianoid.sh
Dit zorgt ervoor dat RELIANOID De componenten werken binnen de vereiste limieten om grote aantallen netwerkverbindingen te kunnen verwerken.
Echter, Processen van derden die op hetzelfde systeem draaien, erven deze limieten mogelijk niet automatisch over.Monitoringagents, externe tools of aangepaste services kunnen daardoor te maken krijgen met een tekort aan bestandsdescriptors als hun limieten lager zijn dan vereist.
Limieten aanpassen voor processen van derden #
Als een applicatie van derden hogere limieten voor bestandsdescriptors vereist, kunnen deze worden geconfigureerd in: /etc/security/limits.conf
Bijvoorbeeld:
* soft nofile 200000 * hard nofile 200000
Deze configuratie verhoogt het toegestane aantal geopende bestanden voor alle gebruikers.
Als alternatief kunnen beperkingen worden toegepast op een specifieke gebruiker:
ncpa soft nofile 200000 ncpa hard nofile 200000
Nadat u de wijzigingen hebt toegepast, start u de betreffende service of het betreffende proces opnieuw op, zodat de bijgewerkte limieten worden geladen.
Conclusie #
De “Te veel open bestanden” Er treedt een fout op wanneer een proces het maximaal toegestane aantal bestandsdescriptors bereikt en geen extra bestanden of netwerkverbindingen meer kan openen. Wanneer deze limiet wordt overschreden, kunnen services mogelijk geen nieuwe verbindingen meer accepteren of niet meer normaal functioneren.
Om deze situatie te voorkomen, moeten beheerders ervoor zorgen dat zowel de systeemwijde limiet voor bestandsdescriptors (fs.file-max) en de per-proceslimiet gedefinieerd door ulimit correct zijn geconfigureerd.
In RELIANOID systemen, servicegerelateerde limieten worden geladen vanuit /etc/profile/relianoid.shDerde partijen die op hetzelfde apparaat draaien, vereisen echter mogelijk aanvullende configuratie via /etc/security/limits.conf zodat ze de juiste limieten voor bestandsdescriptors overnemen.
Door adequate limieten te handhaven en de systeemconfiguratie indien nodig te controleren, kunnen beheerders bijdragen aan een stabiele werking en serviceonderbrekingen voorkomen in omgevingen met een groot aantal gelijktijdige verbindingen.