Dnes můj server selhal s Too many open files in system:, ale já již mají vysoké hodnoty, jaká je maximální hodnota?

Mám pocit, že na google neexistují dobré výsledky, které by vysvětlovaly, co je třeba vzít v úvahu při nastavování těchto hodnot, pouze říkají, že je třeba nastavit 100k.

Mám 32 GB RAM server, který právě používá pouze 10 GB, předpokládám, že zvýšení limitů souborů na velmi vysoké hodnoty zvýší využití RAM, existuje nějaký vzorec, který můžete použít k výpočtu? Jako pro 8 GB RAM může být otevřeno X souborů?

Aktuální nastavení:

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

Komentáře

  • Není to odpověď, ale připadá mi, že omezení maximálního počtu otevřených souborů není způsob, jak ušetřit RAM, ale výkon disku / I / O. Povolení velkého počtu otevřených souborů znamená povolení (potenciálně) velkého počtu současně přístupy na disk. Pravděpodobně budete mít v tomto systému celkový limit i limit na proces. Pokud nejsem uživatel systému Linux, nemohu ' říci mnohem víc o kromě toho ulimit zobrazí / nastaví limit prostředků na proces.
  • je to vůbec problém s SSD disky? Je to ' s serverem a je mi jedno ' je jedno, jestli zemře, hostitelská společnost to prostě nahradí a mám zálohy. Také jsem četl, že síťové zásuvky mohou také způsobit tento problém, záleží mi hlavně na výkonu. ' platím za hardware, ať už použiji 100% nebo 5%, pokud to ' zlepšuje výkon, proč mě to zajímá? U cloudového serveru jsem to viděl jako problém, ale u vyhrazeného hardwaru opravdu ne.
  • Ano, do tohoto limitu se bude počítat také počet otevřených soketů (obecně otevřené deskriptory souborů). Zapomněl jsem na to. Pokud je tedy RAM vaším jediným zájmem, nemyslím si ' že bych se staral o zvýšení limitu, pokud to ale neznamená, že jakákoli služba , kterou poskytnete, začne přidělovat extra paměť související s každou otevřenou zásuvkou. To by bylo něco, co byste mohli prozkoumat jen vy.

Odpověď

Jak říká Kusalananda, zvyšování file-max nebude mít přímý dopad na využití paměti, ale umožní procesům otevřít více deskriptorů souborů, které budou mít efekt „knock-on“ (jak ze sledování popisů souborů v jádře, tak ze zvýšené paměti využití v procesech využívajících tyto popisy a deskriptory) – komentáře k jádru navrhují přibližně jeden kilobajt na soubor pro data jádra a sníží výchozí hodnotu file-max (8192), pokud to skončí nahoru představující více než 10% paměti při spuštění systému ( tj. existuje pouze 80 MiB paměti RAM). Maximální hodnota stanovená jádrem je maximální hodnota, kterou lze uložit do proměnné typu long v jazyce C na vaší architektuře.

Pokud zvýšíte file-max, měli byste také zvýšit inode-max; dokumentace k jádru říká, že by to mělo být „3-4krát větší než hodnota v file-max, protože stdin, stdout a síťové zásuvky také potřebují strukturu inode zvládněte je. “

Pamatujte, že stisknutí file-max bude mít za následek zprávu v protokolu jádra, která řekne„ VFS: maximální limit souboru n dosažen ”S příslušnou hodnotou pro n . Pokud to ve svých protokolech nemáte, buď neuděláte file-max, nebo příliš filtrujete své protokoly (jedná se o zprávu protokolu na úrovni informací).

(file-max neomezuje procesy pomocí CAP_SYS_ADMIN, takže zásahem nezastavíte vše.)

Komentáře

  • Neexistuje tedy žádná nevýhoda v tom, že máte libovolně vysoké počty? ' Nevidím inode-max v mém systému vůbec nějaké? Ubuntu 16.04 zde. Chci jen zabránit tomu, aby se můj server znovu zhroutil, provozuji na tomto serveru více webových služeb a nestarám se ' o využití zdrojů
  • Nevýhodou je, že uprchlé procesy nebude chycen celkovým limitem na popisy souborů, takže by mohly způsobit hladovění zdrojů jinými způsoby.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *