Soluzione 1:
Se il tuo processo viene avviato tramite uno script, puoi inserire la chiamata a ulimit nello script appena prima dell'esecuzione del demone.
Se desideri aumentare l'ulimit per il tuo utente, o per tutti gli utenti, puoi impostare dei limiti che vengono applicati tramite pam_limits
all'accesso. Questi sono impostati in /etc/security/limits.conf
. Nel tuo caso, potresti fare qualcosa del tipo:
* hard nofile 2048
Si noti che "difficile" denota un limite rigido, che non può essere superato e non può essere modificato. Un limite flessibile può essere modificato da un utente (ad esempio qualcuno senza capacità di root), ma non oltre il limite rigido.
Leggi il limits.conf
per ulteriori informazioni sull'uso di pam_limits
.
Soluzione 2:
C'è anche un "massimo totale" di file aperti impostato nel kernel, puoi controllare l'impostazione corrente con:
cat /proc/sys/fs/file-max
E imposta un nuovo valore con:
echo "104854" > /proc/sys/fs/file-max
Se vuoi mantenere la configurazione tra un riavvio e l'altro, aggiungi
sys.fs.file-max=104854
a
/etc/sysctl.conf
Per verificare l'utilizzo massimo corrente del file:
[[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)
Soluzione 3:
Come altri hanno già detto, puoi applicare limiti specifici per utente o gruppo in /etc/security/limits.conf.
Nota:ulimit -n mostra il limite flessibile.
ulimit -H -n
ti mostrerà il limite rigido.
Ciò rende l'output di ulimit -a e ulimit -n abbastanza confuso se, ad esempio, stai aumentando il numero di file da 1024 a 4096, poiché ti aspetteresti di vedere l'output del limite rigido, ma stai ancora vedendo 1024 che è il soft limite.
Inoltre, ricorda che questi limiti vengono applicati per accesso, quindi accedi nuovamente in una nuova shell e controlla le modifiche, non aspettarti che vengano propagate agli accessi esistenti.
Soluzione 4:
Tieni presente che se esegui il tuo processo impostando start-stop-daemon ulimits in /etc/security/limits.conf non funziona. Se, ad esempio, desideri aumentare il limite di file aperti per Tomcat a 20000, devi aggiungerli alle righe a /etc/default/tomcat
:
ulimit -Hn 32768
ulimit -Sn 32768
Ho riscontrato questo problema su debian 6.0.4 Per altri processi le risposte fornite dovrebbero aiutare.