Začal jsem teď na stávajícím Java projektu a první, co jsem zkusil - zbuildovat ho. Bylo tam plno testů (a mraky logování z testů) a běželo to dlouho. Život je plný překvapení: Vyskočila na mne výjimka, co jsem zatím ještě neviděl:
java.io.FileNotFoundException: /path/to/file (Too many open files)
Java používá pro maximální počet otevřených souborů limit operačního systému. Pro nastavení (nejen) tohoto limitu slouží soubor /etc/security/limits.conf. Limity se nastavují per uživatel/skupina a nastavují se dva: soft a hard. Přiznám se, úplně nechápu, jak (pro soubory) funguje soft limit - z dokumentace jsem to úplně nepochopil. Nicméně nás bude (pro Javu) stejně zajímat pouze hard limit, který procesu řekne: Hasta la vista, baby!
Jaký limit otevřených souborů máte momenálně k dispozici, zjistíte příkazy:
- ulimit -Sn (soft limit maxima otevřených souborů)
- ulimit -Hn (hard limit maxima otevřených souborů)
![]() |
Výpis soft a hard limitu max. počtu otevřených souborů |
Příklad nastavení:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#<domain> <type> <item> <value> | |
guido soft nofile 2048 | |
guido hard nofile 10240 |
Tak. A mohli bysme mít hotovo - budete to fungovat... pokud se přihlašujete z terminálu. Typický use case by byl třeba nastavení limitů pro webový server. Pokud vás to ale trápí jako vývojáře na lokálním prostředí, tak budete muset použit příkaz su, aby se změna v terminálu projevila. Problém je, že v grafickém prostředí se soubor limits.conf ignoruje
![]() |
Výpis limitů po změně uživatele |
Aby limit pro počet otevřených souborů vzalo v potaz i GUI, je potřeba ještě poeditovat soubor /etc/systemd/system.conf (a v některých případech i soubor /etc/systemd/user.conf):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[Manager] | |
# Limit maximum of open files | |
DefaultLimitNOFILE=65535 |
Pak už stačí jen systém restartovat a máme hotovo. (Možná to jde i bez restartu pomocí nějaké systemctl magie, ale na to jsem nepřišel.)
Žádné komentáře:
Okomentovat
Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.