Idag kraschade min server med Too many open files in system: men jag har redan höga värden, vad är ett maximivärde för detta?

Jag tycker att det inte finns några bra resultat på google för detta, förklarar vad som måste tas i beaktande för att ställa in dessa värden, de säger bara att ställa in det till 100k.

Jag har en 32 GB RAM-server som bara använder 10 GB just nu, jag antar att en ökning av filgränserna till mycket höga värden kommer att öka RAM-användningen, finns det någon form av formel som du kan använda för att beräkna detta? Som för 8 GB RAM du kan ha X-antal filer öppna?

Aktuella inställningar:

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

Kommentarer

  • Inget svar, men det slår mig att att begränsa det maximala antalet öppna filer inte är ett sätt att spara RAM utan disk I / O-prestanda. Att tillåta ett stort antal öppna filer innebär att man tillåter ett (potentiellt) stort antal samtidiga åtkomst till skivor. Dessutom har du sannolikt en övergripande gräns för hela systemet och en gräns per process för detta. Jag är inte en Linux-användare, jag kan ' inte säga mycket mer om det, förutom att ulimit kommer att visa / ställa in en resursbegränsning per process.
  • är det till och med ett problem för SSD-diskar ändå? Det ' är en server och jag bryr mig inte ' om den dör, värdföretaget kommer bara att ersätta den och jag har säkerhetskopior. Jag läste också att nätverksuttag också kan orsaka det här problemet, jag bryr mig mest om prestanda. Jag ' betalar för hårdvaran antingen om jag använder 100% eller 5% så länge det ' förbättrar prestanda varför bryr sig det? För en molnserver kunde jag se detta vara ett problem men för dedikerad hårdvara inte riktigt
  • Ja, antalet öppna uttag kommer också att räknas mot denna gräns (öppna filbeskrivare i allmänhet). Jag glömde bort det. Så om RAM är ditt enda bekymmer, tror jag inte ' att jag skulle oroa mig för att höja gränsen, såvida inte det betyder att oavsett tjänst du tillhandahåller börjar allokera extra minne relaterat till varje öppet uttag. Detta skulle vara något som bara du kunde undersöka.

Svar

Som Kusalananda säger ökar file-max kommer inte att påverka minnesanvändningen direkt, men det kommer att göra det möjligt för processer att öppna fler filbeskrivare som kommer att ha en knock-on-effekt (både från spårning av filbeskrivningar i kärnan och ökat minne användning i de processer som använder dessa beskrivningar och beskrivningar) – kärnkommentarerna föreslår ungefär en kilobyte per fil för kärnans data och minskar standardvärdet för file-max (8192) om det slutar upp representerar mer än 10% av minnet när systemet startar ( dvs. det finns bara 80 MiB RAM). Det maximala värdet som införs av kärnan är det maximala värdet som kan lagras i en variabel av typen long i C i din arkitektur.

Om du ökar file-max, du bör också öka inode-max; kärndokumentationen säger att detta borde vara ”3-4 gånger större än värdet i filmax, eftersom stdin, stdout och nätverksuttag också behöver en inodestruktur för att hantera dem ” ”, Med lämpligt värde för n . Om du inte har det i dina loggar slår du antingen inte file-max eller filtrerar dina loggar för mycket (det är ett loggmeddelande på informationsnivå).

(file-max begränsar inte processer med CAP_SYS_ADMIN, så att träffar det kommer inte att stoppa allt.)

Kommentarer

  • Så det finns ingen nackdel med att ha godtyckligt höga siffror? Jag ser ' t inode-max i mitt system någonstans? Ubuntu 16.04 här. Jag vill bara förhindra att min server kraschar igen, jag kör flera webbtjänster på denna server och ' bryr mig inte om resursanvändning
  • Nackdelen är att runaway-processer kommer inte att fångas av den övergripande gränsen för filbeskrivningar, så de kan orsaka svält på andra sätt.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *