Domnívám se, že hlavním důvodem limitu je vyhnout se nadměrné spotřebě paměti (každý otevřený deskriptor souboru používá paměť jádra). Slouží také jako ochrana proti chybným aplikacím, které prosakují deskriptory souborů a spotřebovávají systémové prostředky.
Ale vzhledem k tomu, jak absurdně velkou RAM mají moderní systémy ve srovnání se systémy před 10 lety, si myslím, že výchozí hodnoty jsou dnes poměrně nízké.
V roce 2011 byl výchozí pevný limit pro deskriptory souborů v Linuxu zvýšen z 1024 na 4096.
Některý software (např. MongoDB) používá mnohem více deskriptorů souborů, než je výchozí limit. Lidé z MongoDB doporučují zvýšit tento limit na 64 000. Použil jsem rlimit_nofile
300 000 pro určité aplikace.
Dokud ponecháte měkký limit na výchozí (1024), je pravděpodobně docela bezpečné pevný limit zvýšit. Programy musí volat setrlimit()
aby zvýšili svůj limit nad měkký limit a jsou stále omezeni pevným limitem.
Viz také některé související otázky:
- https://serverfault.com/questions/356962/where-are-the-default-ulimit-values-set-linux-centos
- https://serverfault.com/questions/773609/how-do-ulimit-settings-impact-linux
Dopad by za normálních okolností nebyl pozorovatelný, ale modul IO jádra se bude muset postarat o všechny tyto otevřené deskriptory souborů a také by mohly mít dopad na efektivitu mezipaměti.
Takové limity mají výhodu v tom, že chrání uživatele před jeho vlastními chybami (nebo chybami třetích stran). Pokud například spustíte malý program nebo skript, který se rozvětvuje na dobu neurčitou, nakonec se zablokuje na jednom z ulimit
s a tím zabránit intenzivnějšímu (možná neobnovitelnému) zamrznutí počítače.
Pokud nemáte přesné důvody ke zvýšení některého z těchto limitů, měli byste se tomu vyhnout a lépe spát.
Technicky je omezena na maximální hodnotu unsigned long (C Lang), tj. 4 294 967 295
Reference :fs.h
soubor
/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
unsigned long nr_files; /* read only */
unsigned long nr_free_files; /* read only */
unsigned long max_files; /* tunable THIS IS OUR VALUE */
};