Řešení 1:
Pokud je váš proces spuštěn pomocí skriptu, můžete do skriptu umístit volání ulimit těsně před spuštěním démona.
Pokud chcete zvýšit ulimit pro svého uživatele nebo pro všechny uživatele, můžete nastavit limity, které se použijí prostřednictvím pam_limits
při přihlášení. Ty jsou nastaveny v /etc/security/limits.conf
. Ve vašem případě můžete udělat něco jako:
* hard nofile 2048
Všimněte si, že „tvrdý“ označuje pevný limit – takový, který nelze překročit a nelze jej změnit. Měkký limit může změnit uživatel (např. někdo bez oprávnění root), ale ne za pevný limit.
Přečtěte si limits.conf
pro více informací o použití pam_limits
.
Řešení 2:
V jádře je také nastaveno "celkové maximum" otevřených souborů, aktuální nastavení můžete zkontrolovat pomocí:
cat /proc/sys/fs/file-max
A nastavte novou hodnotu pomocí:
echo "104854" > /proc/sys/fs/file-max
Pokud chcete zachovat konfiguraci mezi restarty add
sys.fs.file-max=104854
do
/etc/sysctl.conf
Chcete-li zkontrolovat aktuální maximální využití souboru:
[[email protected] proc]# cat /proc/sys/fs/file-nr
3391 969 52427
| | |
| | |
| | maximum open file descriptors
| total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)
Řešení 3:
Jak řekli jiní, můžete použít specifické limity na uživatele nebo skupinu v /etc/security/limits.conf.
Poznámka:ulimit -n ukazuje měkký limit.
ulimit -H -n
vám ukáže pevný limit.
Díky tomu je výstup ulimit -a a ulimit -n docela matoucí, pokud jste například zvýšili počet souborů z 1024 na 4096, jak byste očekávali, že uvidíte výstup s pevným limitem, ale stále vidíte 1024, což je měkké limit.
Také si pamatujte, že tato omezení jsou vynucována na každé přihlášení, takže se znovu přihlaste v novém prostředí a zkontrolujte své změny, neočekávejte, že se přenesou do stávajících přihlášení.
Řešení 4:
Uvědomte si, že pokud proces spustíte pomocí start-stop-daemon, nastavení ulimitů v /etc/security/limits.conf nebude fungovat. Pokud například chcete zvýšit limit otevřených souborů pro kocoura na 20 000, musíte je přidat do řádků do /etc/default/tomcat
:
ulimit -Hn 32768
ulimit -Sn 32768
Narazil jsem na tento problém v debianu 6.0.4. Pro jiný proces by uvedené odpovědi měly pomoci.