I dag styrtede min server ned med Too many open files in system: men jeg allerede har høje værdier, hvad er en maksimumsværdi for dette?

Jeg har lyst til, at der ikke er gode resultater på google for dette og forklarer, hvad der skal tages i betragtning ved indstilling af disse værdier, de siger bare at indstille det til 100k.

Jeg har en 32 GB RAM-server, der kun bruger 10 GB lige nu, jeg antager at øge filgrænserne til meget høje værdier vil øge RAM-brugen, er der en formel, du kan bruge til at beregne dette? Ligesom for 8 GB RAM dig kan have X antal filer åbne?

Nuværende indstillinger:

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

Kommentarer

  • Ikke et svar, men det slår mig, at begrænsning af det maksimale antal åbne filer ikke er en måde at spare RAM på, men disk I / O-ydeevne. Tilladelse af et stort antal åbne filer indebærer at tillade et (potentielt) stort antal samtidige diskadgang. Du har sandsynligvis også en samlet grænse for hele systemet samt en grænse pr. proces på dette. Ikke som Linux-bruger kan jeg ' ikke sige meget mere om det, bortset fra at ulimit vil vise / indstille en ressourcebegrænsning pr. proces.
  • er dette endda et problem for SSD-diske alligevel? Det ' er en server, og jeg bryder mig ikke ', hvis det dør, hostingfirmaet erstatter bare det, og jeg har sikkerhedskopier. Jeg læste også, at netværksstik også kan forårsage dette problem, jeg er mest interesseret i ydeevne. Jeg ' betaler for hardwaren, enten hvis jeg bruger 100% eller 5%, så længe det ' forbedrer ydeevnen, hvorfor pleje? For en cloud-server kunne jeg se dette et problem, men for dedikeret hardware ikke rigtig
  • Ja, antallet af åbne stikkontakter vil også tælle med denne grænse (åbne fil-deskriptorer generelt). Jeg glemte det. Så hvis RAM er dit eneste problem, tror jeg ikke ' Jeg ville bekymre mig om at øge grænsen, medmindre det betyder, at uanset hvilken tjeneste du leverer, begynder at tildele ekstra hukommelse relateret til hvert åbent stik. Dette ville være noget, som kun du kunne undersøge.

Svar

Som Kusalananda siger, øges file-max har ikke direkte indflydelse på hukommelsesforbruget, men det giver processer mulighed for at åbne flere filbeskrivere, som har en knock-on-effekt (både fra sporing af filbeskrivelser i kernen og øget hukommelse brug i processerne ved hjælp af disse beskrivelser og beskrivelser) – kernekommentarerne foreslår cirka en kilobyte pr. fil til kernedataene og reducerer standardværdien på file-max (8192), hvis det ender op repræsenterer mere end 10% af hukommelsen, når systemet starter ( dvs. der er kun 80 MiB RAM). Den maksimale værdi, som kernen pålægges, er den maksimale værdi, der kan gemmes i en variabel af typen long i C i din arkitektur.

Hvis du øger file-max, skal du også øge inode-max; kernedokumentationen siger, at dette skal være “3-4 gange større end værdien i fil-max, da stdin, stdout og netværksstik også har brug for en inode-struktur til håndter dem. ”

Bemærk at at trykke på file-max vil resultere i en kernelogmeddelelse, der siger” VFS: fil-maks grænse n nået ”, Med den passende værdi for n . Hvis du ikke har det i dine logfiler, rammer du enten ikke file-max eller filtrerer dine logfiler ikke for meget (det er en logmeddelelse på infoniveau).

(file-max begrænser ikke processer med CAP_SYS_ADMIN, så når du rammer det, stopper det ikke alt.)

Kommentarer

  • Så der er ingen ulempe ved at have vilkårligt høje tal? Jeg ser ' ikke inode-max i mit system nogen steder? Ubuntu 16.04 her. Jeg vil bare forhindre, at min server går ned igen, jeg kører flere webtjenester på denne server og ' er ligeglad med ressourceudnyttelse
  • Ulempen er, at løbende processer bliver ikke fanget af den overordnede grænse for filbeskrivelser, så de kan forårsage ressourceudsultning på andre måder.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *