Come aumentare il limite di file aperti per un utente non root?

121

Questo sta accadendo su Ubuntu Versione 12.04 (preciso) a 64 bit Kernel Linux 3.2.0-25-virtual

Sto cercando di aumentare il numero di file aperti consentiti per un utente. Questo è per la mia applicazione java Eclipse in cui il limite attuale di 1024 non è sufficiente.

Secondo i post che ho trovato finora, dovrei essere in grado di inserire le righe in

/etc/security/limits.conf come questo:

soft nofile 4096
hard nofile 4096

per aumentare il numero di file aperti consentiti per tutti gli utenti.

Ma non funziona per me e penso che il problema non sia legato a quel file.

Per tutti gli utenti, il limite predefinito è 1024, indipendentemente da ciò che è in /etc/security/limits.conf (ho riavviato dopo aver cambiato quel file)

$ ulimit -n
1024

Ora, nonostante le voci in /etc/security/limits.conf, non posso aumentarlo:

$ ulimit -n 2048

-bash: ulimit: file aperti: impossibile modificare il limite: operazione non consentita La parte strana è che posso cambiare il limite verso il basso , ma non posso cambiarlo verso l'alto - anche per tornare a un numero che è al di sotto del limite originale:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

-bash: ulimit: open files: cannot modify limit: Operation not permitted

Come root, posso cambiare quel limite in qualunque cosa io voglia, su o giù. Non sembra nemmeno preoccuparsi del presunto limite del sistema in / proc / sys / fs / file-max

# cat /proc/sys/fs/file-max
188897

# ulimit -n 188898
# ulimit -n 
188898

Ma anche io ottengo eclissi da eseguire come root, la mia applicazione si blocca ancora a causa dell'eccezione "Too Many Open File"!

Finora, non ho trovato alcun modo per aumentare il limite dei file aperti per un utente non root.

Come dovrei farlo correttamente? Ho visto molti altri post ma senza fortuna!

    
posta iCode 11.07.2012 - 04:06

3 risposte

120

Il comando ulimit per impostazione predefinita modifica i limiti HARD, che tu (un utente) puoi ridurre, ma non puoi aumentare.

Utilizza l'opzione -S per modificare il limite SOFT , che può variare da 0 - { HARD }.

In realtà ho aggiunto alias ulimit a ulimit -S , quindi il valore predefinito è sempre sui limiti soft.

alias ulimit='ulimit -S'

Per quanto riguarda il tuo problema, ti manca una colonna nelle voci in /etc/security/limits.conf .

Ci dovrebbero essere QUATTRO colonne, ma il primo è mancante nel tuo esempio.

* soft nofile 4096
* hard nofile 4096

La prima colonna descrive l'OMS a cui si applica il limite. '*' è un carattere jolly, ovvero tutti gli utenti. Per aumentare i limiti per root , devi inserire esplicitamente "root" invece di "*".

Devi anche modificare /etc/pam.d/common-session* e aggiungere la seguente riga alla fine:

session required pam_limits.so
    
risposta data lornix 11.07.2012 - 04:16
15

Se utilizzi limiti soft e hard per utente puoi usare qualcosa come:

su USER --shell /bin/bash --command "ulimit -n"

per verificare se le tue impostazioni funzionano o meno per quell'utente specifico.

    
risposta data Jeroen Teeuwen 12.09.2013 - 12:34
4

Ho molti problemi a farlo funzionare.

L'utilizzo di quanto segue consente di aggiornarlo indipendentemente dall'autorizzazione dell'utente.

sudo sysctl -w fs.inotify.max_user_watches=100000
    
risposta data Layke 10.07.2015 - 17:41

Leggi altre domande sui tag