GNU/Linux >> Znalost Linux >  >> Linux

Jak se liší ulimit -n a /proc/sys/fs/file-max?

Řešení 1:

file-max je maximální počet popisovačů souborů (FD) vynucený na úrovni jádra, který nelze překonat všemi procesy bez zvýšení. ulimit je vynuceno na úrovni procesu, která může být menší než file-max .

Zvýšením file-max nehrozí žádné riziko dopadu na výkon . Moderní distribuce mají maximální FD nastavené dost vysoko, zatímco v minulosti vyžadovaly rekompilaci a modifikaci jádra, aby se zvýšily nad 1024. Nezvyšoval bych v celém systému, pokud nemáte technickou potřebu.

Konfigurace pro jednotlivé procesy je často potřeba vyladit pro obsluhu konkrétního démona, ať už je to databáze nebo webový server. Pokud limit zcela odstraníte, daný démon by mohl potenciálně vyčerpat všechny dostupné systémové prostředky; což znamená, že nebudete schopni problém vyřešit jinak než stisknutím tlačítka reset nebo vypnutím a zapnutím. Obojí samozřejmě pravděpodobně povede k poškození všech otevřených souborů.

Řešení 2:

Omezení ulimit je na unikátního uživatele. Takže uživatel1, bez ohledu na to, kolikrát se přihlásí nebo běží procesy, bude omezen na 1024. Je to kombinované.

Nejsem si jistý, zda zcela rozumím významu této věty (angličtina není můj mateřský jazyk) Pokud tato věta znamená, že konfigurace ulimit pro deskriptory souborů není omezením na jednotlivé procesy, přijatá odpověď (AFAIK) je nesprávná.

Myslím tím, že pokud nějaký uživatel spustil 4 procesy a konfigurace ulimit pro FD je 1024, každý proces může otevřít 1024 FD. Uživatel nebude omezen na 1024 FD, ale na procesy, které tento uživatel spouští.

Například:

[email protected]:~$ ulimit -n
1024
[email protected]:~$ lsof | grep $USER | wc -l
8145

Zde je příklad perlu, kde dosáhneme limitu (je to limit na proces):

#!/usr/bin/perl

$count = 0;
@filedescriptors;

while ($count <= 1024) {
    $FILE = ${count};
    open $FILE, ">", "/tmp/example$count" or die "\n\n FDs: $count $!";
    push(@filedescriptors, $FILE);
    $count ++;
}

Výsledek:

FDs: 1021 Too many open files at ./test.pl line 8.

1021, protože před dosažením smyčky while byly 3 otevřené deskriptory souborů (stdout, stdin a stderr)

Omlouvám se, pokud se úplně mýlím nebo jsem odpověď špatně pochopil.


Linux
  1. Bash =~ Regex A Https://regex101.com/?

  2. Linux – jak se liší symbolický odkaz /proc//exe od běžných symbolických odkazů?

  3. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  1. Linux – propojení /proc/mnt s /proc/mounts?

  2. Linux – Jak otestovat, zda je blokové zařízení pouze pro čtení z /sys nebo /proc?

  3. Linux – Rozdíl mezi /sys/block/sda1/stat a /sys/block/xvda1/stat?

  1. Jak získám cestu k procesu v Unixu / Linuxu

  2. /proc/[pid]/pagemaps a /proc/[pid]/maps | linux

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?