I dag krasjet serveren min med Too many open files in system: men jeg allerede har høye verdier, hva er en maksimumsverdi for dette?

Jeg føler at det ikke er gode resultater på google for dette, og forklarer hva som må tas i betraktning for å sette disse verdiene, de sier bare å sette det til 100k.

Jeg har en 32 GB RAM-server som bare bruker 10 GB akkurat nå, jeg antar at økning av filgrensene til veldig høye verdier vil øke RAM-bruken, er det noen form for formel du kan bruke til å beregne dette? Som for 8 GB RAM du kan ha X-antall filer åpne?

Gjeldende innstillinger:

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

Kommentarer

  • Ikke noe svar, men det slår meg at det å begrense maksimalt antall åpne filer ikke er en måte å spare RAM på, men disk I / O-ytelse. Å tillate et stort antall åpne filer innebærer å tillate et (potensielt) stort antall samtidige disketilganger. Du vil sannsynligvis også ha en helhetsgrense for hele systemet, samt en grense per prosess på dette. Ikke som Linux-bruker, kan jeg ' ikke si mye mer om det, annet enn det ulimit vil vise / angi en ressursgrense per prosess.
  • er dette til og med et problem for SSD-disker uansett? Det ' er en server, og jeg bryr meg ikke ' om den dør, hostingfirmaet vil bare erstatte den og jeg har sikkerhetskopier. Jeg leste også at nettverkskontakter også kan forårsake dette problemet, jeg bryr meg mest om ytelse. Jeg ' betaler for maskinvaren, enten hvis jeg bruker 100% eller 5%, så lenge det ' forbedrer ytelsen, hvorfor bryr det seg? For en skyserver kunne jeg se dette som et problem, men for dedikert maskinvare egentlig ikke
  • Ja, antall åpne stikkontakter vil også telle mot denne grensen (åpne filbeskrivelser generelt). Jeg glemte det. Så hvis RAM er din eneste bekymring, tror jeg ikke ' Jeg vil ikke bekymre meg for å øke grensen, med mindre det betyr at uansett hvilken tjeneste du tilbyr begynner å tildele ekstra minne relatert til hver åpen stikkontakt. Dette ville være noe som bare du kunne undersøke.

Svar

Som Kusalananda sier, øker file-max vil ikke direkte ha innvirkning på minnebruk, men det vil tillate prosesser å åpne flere filbeskrivere som vil ha en påkjøringseffekt (både fra sporing av filbeskrivelser i kjernen, og økt minne bruk i prosessene som bruker disse beskrivelsene og beskrivelsene) – kjernekommentarene antyder omtrent en kilobyte per fil for kjernedataene, og vil redusere standardverdien på file-max (8192) hvis det ender representerer mer enn 10% av minnet når systemet starter opp ( dvs. det er bare 80 MiB RAM). Maksimumsverdien som kjernen pålegger er den maksimale verdien som kan lagres i en variabel av typen long i C i arkitekturen.

Hvis du øker file-max, bør du også øke inode-max; kjernedokumentasjonen sier at dette skal være «3-4 ganger større enn verdien i filmax, siden stdin, stdout og nettverkskontakter også trenger en inode-struktur for å håndtere dem. ”

Merk at å trykke file-max vil resultere i en kjerneloggmelding som sier» VFS: maks filgrense n nådd ”, Med riktig verdi for n . Hvis du ikke har det i loggene, treffer du ikke file-max, eller filtrerer ikke loggene for mye (det er en loggmelding på informasjonsnivå).

(file-max begrenser ikke prosesser med CAP_SYS_ADMIN, så å slå på det vil ikke stoppe alt.)

Kommentarer

  • Så det er ingen ulemper ved å ha vilkårlig høye tall? Jeg ser ikke ' inode-max i systemet mitt noe? Ubuntu 16.04 her. Jeg vil bare forhindre at serveren min krasjer igjen, jeg kjører flere webtjenester på denne serveren og bryr meg ikke ' om ressursutnyttelse
  • Ulempen er at løpende prosesser blir ikke fanget av den generelle grensen for filbeskrivelser, slik at de kan forårsake ressurssult på andre måter.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *