Ma a szerverem összeomlott Too many open files in system: -vel, de én már vannak magas értékei, mi ennek a maximális értéke?

Úgy érzem, hogy a Google-on nincsenek ilyen jó eredmények, elmagyarázva, hogy mit kell figyelembe venni ezen értékek beállításakor, csak azt mondják, hogy állítsd 100 ezerre.

Van egy 32 GB-os RAM-kiszolgálóm, amely jelenleg csak 10 GB-ot használ, feltételezem, hogy a fájlkorlátok nagyon magas értékekre történő növelése növeli a RAM-felhasználást. Van-e valamilyen képlet ennek kiszámításához? Mint például 8 GB RAM esetén megnyithat X fájlt?

Aktuális beállítások:

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

megjegyzések

  • Nem válasz, de az a számomra feltűnő, hogy a nyitott fájlok maximális számának korlátozása nem a RAM, hanem a lemez I / O teljesítményének megtakarításának módja. A nagy számú nyitott fájl engedélyezése magában foglalja (potenciálisan) nagyszámú egyidejű lemezelérések. Valószínűleg rendszerszintű, valamint folyamatonkénti korlátozással rendelkezik erre vonatkozóan. Mivel nem Linux felhasználó vagyok, ' nem tudok többet mondani erről hogy azon kívül ulimit megmutatja / beállítja a folyamatonkénti erőforráskorlátot.
  • Ez egyébként is aggasztja az SSD-lemezeket? ' s egy szerver, és én nem ' érdekel, ha meghal, a tárhelyszolgáltató csak lecseréli, és nekem vannak biztonsági mentéseim. Azt is olvastam, hogy a hálózati aljzatok is okozhatják ezt a problémát, leginkább a teljesítmény érdekel. ' fizetek a hardverért, ha 100% -ot vagy 5% -ot használok, amíg ' javítja a teljesítményt, miért érdekelne? Felhőkiszolgáló esetében láttam ezt a problémát, de dedikált hardverek esetében nem igazán
  • Igen, a nyitott foglalatok száma is beleszámít ebbe a korlátba (általában a nyílt fájlleírók). Erről megfeledkeztem. Tehát ha a RAM az egyetlen gondod, nem hiszem, hogy aggódnék a limit növelése miatt, hacsak ez nem azt jelenti, hogy bármelyik szolgáltatás , amit nyújtasz, elkezdi kiosztani a < “33163db238″> t. i> extra memória az egyes nyitott foglalatokhoz kapcsolódóan. Ezt csak Ön vizsgálhatná meg.

Válasz

Mint Kusalananda mondja, növekszik a file-max nem lesz közvetlen hatással a memória használatára, de lehetővé teszi a folyamatok számára, hogy több fájlleírót nyissanak, amelyek bekapcsoló hatást gyakorolnak (mind a kernelben található fájlleírások nyomon követése, mind a megnövekedett memória miatt). használat a folyamatokban, amelyek ezeket a leírásokat és leírásokat használják) – a kernel megjegyzései fájlonként körülbelül egy kilobájtot javasolnak a kernel adataihoz, és ha ez véget ér, csökkenteni fogja az file-max (8192) alapértelmezett értékét a rendszer indításakor a memória több mint 10% -át képviseli ( ie csak 80 MiB RAM van). A kernel által kiszabott maximális érték az a maximális érték, amelyet az architektúráján a C típusú long változóban lehet tárolni.

Ha növeli a file-max, növelnie kell az inode-max; a rendszermag dokumentációja szerint ennek „3-4-szer nagyobbnak kell lennie, mint a file-max értéke, mivel az stdin, az stdout és a hálózati aljzatoknak is inode struktúrára van szükségük kezelje őket. ”

Ne feledje, hogy a file-max megütése egy kernel naplóüzenetet eredményez:„ VFS: file-max limit n elérte ”, A n megfelelő értékével. Ha nincs ilyen a naplóiban, akkor vagy nem nyomja meg a file-max elemet, vagy túlságosan kiszűri a naplóit (ez egy információszintű naplóüzenet).

(file-max nem korlátozza a folyamatokat CAP_SYS_ADMIN -vel, így az ütése nem állít meg mindent.)

Megjegyzések

  • Tehát nincs hátránya az önkényesen magas számoknak? Nem látom ' a rendszeremben inode-max? Ubuntu 16.04 itt. Csak azt akarom megakadályozni, hogy a szerverem újra összeomlik, több webszolgáltatást futtatok ezen a kiszolgálón, és nem ' nem érdekel az erőforrások kihasználása
  • Hátránya, hogy elszabadult folyamatok nem ragadja meg a fájlleírások általános korlátja, ezért más módon okozhatják az erőforrások éhezését.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük