Ako môžem zmeniť limit počtu otvorených súborov v systéme Linux?

Pri spúšťaní mojej aplikácie sa mi niekedy zobrazí chyba o "príliš veľkom počte otvorených súborov".

Spustenie príkazu ulimit -a hlási, že limit je 1024. Ako môžem zvýšiť limit nad 1024?

Edit Výsledkom príkazu ulimit -n 2048 je chyba oprávnenia.

Riešenie

Vždy môžete skúsiť vykonať ulimit -n 2048. Tým sa obnoví len limit pre váš aktuálny shell a zadané číslo nesmie prekročiť pevný limit.

Každý operačný systém má v konfiguračnom súbore nastavený iný tvrdý limit. Napríklad tvrdý limit otvorených súborov v systéme Solaris je možné nastaviť pri štarte systému z /etc/system.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

V OS X sa ten istý údaj musí nastaviť v súbore /etc/sysctl.conf.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Pod Linuxom sa tieto nastavenia často nachádzajú v súbore /etc/security/limits.conf.

Existujú dva druhy limitov:

  • mäkké limity sú jednoducho aktuálne platné limity
  • tvrdé limity označujú maximálnu hodnotu, ktorú nemožno prekročiť nastavením mäkkého limitu

Mäkké limity môže nastaviť ktorýkoľvek používateľ, zatiaľ čo tvrdé limity môže meniť len root. Limity sú vlastnosťou procesu. Dedia sa pri vytváraní podriadeného procesu, takže celosystémové limity by sa mali nastavovať počas inicializácie systému v init skriptov a používateľské limity by sa mali nastavovať počas prihlasovania používateľa napríklad pomocou pam_limits.

Pri štarte počítača sa často nastavujú predvolené hodnoty. Takže aj keď môžete v individuálnom shelli resetovať ulimit, môže sa stať, že pri reštarte sa obnoví na predchádzajúcu hodnotu. Ak chcete zmeniť predvolené nastavenie, možno budete chcieť v zavádzacích skriptov vyhľadať príkazy existencie ulimit.

Komentáre (3)

Ak používate Linux a vyskytla sa chyba oprávnenia, musíte zvýšiť povolený limit v súbore /etc/limits.conf alebo /etc/security/limits.conf (kde sa súbor nachádza, závisí od konkrétnej distribúcie Linuxu).

Ak chcete napríklad povoliť komukoľvek na počítači zvýšiť počet otvorených súborov na 10000, pridajte riadok do súboru limits.conf.

* hard nofile 10000

Potom sa odhláste a znovu prihláste do systému a malo by to byť možné:

ulimit -n 10000

bez chyby oprávnenia.

Komentáre (6)
  1. Pridajte nasledujúci riadok do súboru /etc/security/limits.conf
webuser hard nofile 64000

potom sa prihláste ako webuser

su - webuser
  1. Upravte nasledujúce dva súbory pre webuser

Pridajte súbor .bashrc a .bash_profile spustením

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile
  1. Odhláste sa, potom sa znovu prihláste a overte, či boli zmeny vykonané správne:
$ ulimit -a | grep open
open files                      (-n) 64000

To je všetko a oni bum, bum bum.

Komentáre (2)