Linux fikser feilen “for mange åpne filer”

Linux fikser feilen “for mange åpne filer”

Denne opplæringen forklarer hvordan du løser "for mange åpne filer" Linux -feilen.

Etter å ha lest denne artikkelen vil du forstå årsaken til feilen du får, og du vil vite hvordan du fikser den. Du vil ikke bare lære å fikse feilen, men også andre viktige aspekter ved Linux OS -filprosessene dine.

Betydningen av "for mange åpne filer" -feil

Når en bruker utfører en prosess, har prosessen tilknyttet filer som inneholder informasjon om filbruken. For eksempel kan filbeskrivelser informere kjernen om hvordan du får tilgang til en fil, eller hvordan du kan håndtere den til en annen ressurs. For eksempel når vi bruker et rør for å omdirigere en prosess til en annen.

Som standard har hver Linux -utført prosess minst 3 tilknyttede filer som heter Filbeskrivelser: Stdin, stdout og stderr. Deres funksjon er vist i tabellen nedenfor.

Filbeskrivelse Antall Funksjon
Stdin 0 Refererer til tastaturinngangsmetoden
Stdout 1 Skriver ut eller omdirigerer utdataene, refererer til skjermen
Stderr 2 Skriver ut eller omdirigerer feil, refererer til skjermen

Det er en grense for filbeskrivelser brukere og prosesser som kan utføres samtidig. Når grensen er nådd og brukeren eller prosessen prøver å åpne ytterligere filbeskrivelser, får vi "For mange åpne filer feil”.

Derfor er løsningen på denne feilen å øke grensen for filbeskrivelser en bruker eller prosess kan åpne.

Å fikse Linux "for mange åpne filer" -feil

For å sjekke deskriptorfilenes grense for den aktuelle økten, kjør kommandoen vist nedenfor.

ulimit -n

Som du ser ovenfor, er grensen 1024.

La oss nå sjekke brukergrensen ved å utføre følgende kommando:

ulimit -u

For å lære antall gjeldende filer kan du bruke kommandoen som vises på skjermdumpen nedenfor.

lsof | wc -l

Kommandoen vist nedenfor kan brukes til å øke deskriptorfilenes grense for å løse denne feilen. Likevel fungerer ikke dette hvis grensen som er spesifisert i konfigurasjonsfiler er nådd.

Som du ser tillater ikke systemet oss å øke grensen. I et slikt tilfelle må vi redigere et par filer.

I den første filen som skal redigerer, vil du se to typer grenser: harde og myke grenser:

Den harde grensen representerer den maksimale grensen som er tillatt for den myke grensen. Redigering av den harde grensen krever privilegier.

På den annen side brukes den myke grensen av systemet for å begrense alle systemressurser for å utføre prosesser. Den myke grensen kan ikke være større enn den harde grensen.

Du kan lære både harde og myke grenser med kommandoene som er vist på følgende skjermbilde, der Ulimit -Sn viser den myke grensen og Ulimit -hn viser den harde grensen.

Åpne først følgende fil med privilegier:

sudo nano/etc/sikkerhet/grenser.konf

Rediger linjene som er vist nedenfor, og øker grensen. I mitt tilfelle øker jeg den myke grensen fra 1024 til 2048. Her kan du også redigere den harde grensen om nødvendig.

Start deretter Daemon-Reexec ved å bruke SystemCTL som vist nedenfor.

sudo systemctl daemon-reexec

Åpne en ny terminal eller starte økten på nytt for å sjekke endringer ble gjort med suksess og prøv å endre Ulimit igjen ved å kjøre følgende kommando og endre grensen for den du spesifiserte i /etc/sikkerhet/grenser.konf fil.

Ulimit -n 2048

Som du ser ovenfor, ble grensen oppdatert.

I tilfelle det ikke fungerte for deg, åpner du følgende fil med privilegier:

sudo nano/etc/systemd/system.konf

Finn linjen StandardlimitnOfile = og endre det første tallet før tykktarmen, og øke grensen. I mitt tilfelle økte jeg det fra 1024 til 2048. Deretter, lukk og avslutt filen som lagrer endringene.

Åpne også følgende fil med privilegier:

sudo nano/etc/systemd/bruker.konf

Finn samme linje og rediger den, gjenta endringene som er gjort tidligere.

Start Reexec -demonen på nytt med igjen ved hjelp av SystemCTL.

sudo systemctl daemon-reexec

Start økten på nytt og bruk følgende kommando, erstatt 2048 med grensen du vil angi og konfigurert i konfigurasjonsfilene:

Ulimit -n 2048

Følgende kommando returnerer grensen for hele systemet:

Cat/Proc/Sys/FS/File-Max

Du endrer systemgrensen ved å bruke følgende kommando:

sudo sysctl -w fs.fil-max =

For å gjøre endringen permanent, rediger følgende fil med privilegier:

sudo nano /etc /sysctl.konf

Legg til følgende linje erstatning Med den nye grensen du vil angi:

fs.fil-max =

Start på nytt for å bruke nye endringer med kommandoen nedenfor.

sudo sysctl -p

Det er alt, etter å ha økt ulimit, "For mange åpne filer”Feil må fikses.

Konklusjon

Denne feilen kan enkelt løses av hvilken som helst Linux -bruker. Linux tilbyr forskjellige måter å nærme seg dette problemet på, kan du gjerne prøve dem alle for å bli kvitt denne feilen. Trinnene beskrevet ovenfor er gyldige for mange Linux -distribusjoner, men gjort på Debian -baserte distros. Hvis du er interessert i å lære om filbeskrivelser, har vi publisert spesifikt innhold om dette emnet du kan lese på dette nettstedet. Filbeskrivelser er en grunnleggende komponent i alle operativsystemer.

Takk for at du leser denne opplæringen som forklarer hvordan du løser feilen “Too Many Open Files” i Linux. Fortsett å følge oss for mer profesjonelle Linux -artikler.