Vandaag crashte mijn server met Too many open files in system: maar ik hebben al hoge waarden, wat is hiervoor een maximale waarde?

Ik heb het gevoel dat er hier geen goede resultaten op Google voor zijn, waarin wordt uitgelegd waar rekening mee moet worden gehouden bij het instellen van die waarden, ze zeggen gewoon om het in te stellen op 100k.

Ik heb een 32 GB RAM-server die momenteel slechts 10 GB gebruikt, ik neem aan dat het verhogen van de bestandslimieten tot zeer hoge waarden het RAM-gebruik zal verhogen, is er een soort formule die u kunt gebruiken om dit te berekenen? Zoals voor 8 GB RAM die u kan X aantal bestanden geopend hebben?

Huidige instellingen:

cat /proc/sys/fs/file-max 100000 ulimit -Hn 1048576 ulimit -Sn 1024 

Reacties

  • Geen antwoord, maar het valt me op dat het beperken van het maximale aantal geopende bestanden geen manier is om RAM te besparen, maar schijf I / O-prestaties. Het toestaan van een groot aantal open bestanden houdt in dat een (potentieel) groot aantal gelijktijdige schijftoegang. Ook heb je waarschijnlijk een systeembrede algemene limiet en een limiet per proces. Omdat ik geen Linux-gebruiker ben, kan ik ' niet veel meer zeggen over dat, behalve dat ulimit toont / stelt een resourcelimiet per proces in.
  • Is dit überhaupt een probleem voor SSD-schijven? Het ' is een server en het maakt me ' niet uit als het sterft, het hostingbedrijf zal het gewoon vervangen en ik heb back-ups. Ik heb ook gelezen dat netwerksockets dit probleem ook kunnen veroorzaken, ik geef vooral om de prestaties. Ik ' m betaal voor de hardware, hetzij als ik 100% of 5% gebruik, zolang het ' de prestaties verbetert, waarom zou het me schelen? Voor een cloudserver zou ik dit een probleem kunnen zien, maar voor speciale hardware niet echt
  • Ja, het aantal open sockets telt ook mee voor deze limiet (open bestandsdescriptors in het algemeen). Ik ben dat vergeten. Dus als RAM uw enige zorg is, denk ik niet ' dat ik me zorgen zou maken over het verhogen van de limiet, tenzij dat betekent dat welke service u ook aanbiedt, begint met het toewijzen van extra geheugen gerelateerd aan elke open socket. Dit zou iets zijn dat alleen jij zou kunnen onderzoeken.

Antwoord

Zoals Kusalananda zegt, stijgt file-max heeft niet direct invloed op het geheugengebruik, maar het zal processen toestaan om meer bestandsdescriptors te openen, wat een domino-effect heeft (zowel door het volgen van bestandsbeschrijvingen in de kernel, als door meer geheugen gebruik in de processen die die beschrijvingen en descriptoren gebruiken) – de kernelcommentaar suggereert ongeveer één kilobyte per bestand voor de gegevens van de kernel, en zal de standaardwaarde van file-max (8192) verminderen als dat eindigt up vertegenwoordigt meer dan 10% van het geheugen wanneer het systeem opstart ( dwz er is slechts 80 MiB RAM). De maximale waarde opgelegd door de kernel is de maximale waarde die kan worden opgeslagen in een variabele van het type long in C op je architectuur.

Als je file-max, u moet ook inode-max; de kerneldocumentatie zegt dat dit “3-4 keer groter moet zijn dan de waarde in file-max, aangezien stdin, stdout en netwerksockets ook een inode-structuur nodig hebben om behandel ze. ”

Merk op dat het raken van file-max zal resulteren in een kernellogbericht met de melding” VFS: file-max limit n bereikt ”, Met de juiste waarde voor n . Als u dat niet in uw logboeken heeft, slaat u ofwel niet op file-max, of filtert u uw logboeken te veel (het is een logbericht op info-niveau).

(file-max beperkt processen niet met CAP_SYS_ADMIN, dus door erop te slaan zal niet alles stoppen.)

Reacties

  • Er is dus geen keerzijde aan het hebben van willekeurig hoge cijfers? Ik ' zie inode-max toch niet in mijn systeem? Ubuntu 16.04 hier. Ik wil gewoon voorkomen dat mijn server opnieuw crasht, ik draai meerdere webservices op deze server en ' geef me niet om het gebruik van bronnen
  • Het nadeel is dat processen op hol slaan wordt niet betrapt door de algemene limiet voor bestandsbeschrijvingen, dus ze kunnen op andere manieren uithongering van bronnen veroorzaken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *