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


144

Questo accade su Ubuntu Release 12.04 (preciso) 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 l'attuale limite di 1024 non è sufficiente.

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

/etc/security/limits.conf in questo modo:

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 correlato a quel file.

Per tutti gli utenti, il limite predefinito è 1024, indipendentemente da ciò che è in /etc/security/limits.conf (ho riavviato dopo aver modificato 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 con quello che voglio, su o giù. Non sembra nemmeno preoccuparsi del presunto limite a livello di sistema in / proc / sys / fs / file-max

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

# ulimit -n 188898
# ulimit -n 
188898

Ma anche se eseguo eclipse come root, la mia applicazione si blocca ancora a causa dell'eccezione "Troppi file aperti"!

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

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


6
Inoltre, tieni presente che dopo la modifica /etc/security/limits.conf, potrebbe essere necessario disconnettersi e riconnettersi prima di poter utilizzare il nuovo limite massimo. L'ho fatto e sono rimasto sconcertato ulimit -Hsmostrando ancora 1000 quando l'ho appena aumentato a 1000000! Quindi mi sono disconnesso e riconnesso e ulimit ha mostrato il nuovo importo.
Cerin,

Per la sessione della GUI potresti trovare anche questo thread importante (Ubuntu 16+) .
Waldemar Wosiński l'

Risposte:


142

Il ulimitcomando di default modifica i limiti HARD, che tu (un utente) puoi abbassare, ma non puoi alzare.

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

Ho effettivamente alias ulimitper ulimit -S, in modo che il default è il limite morbide per tutto il tempo.

alias ulimit='ulimit -S'

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

Dovrebbero esserci QUATTRO colonne, ma la prima manca nel tuo esempio.

* soft nofile 4096
* hard nofile 4096

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

È inoltre necessario modificare /etc/pam.d/common-session*e aggiungere la seguente riga alla fine:

session required pam_limits.so

1
Come posso modificare il limite rigido per il numero massimo di descrittori di file aperti? Il mio problema è che devo consentire alla mia applicazione Eclipse di avere tutti i file aperti che vuole, ma il limite di 4096 non è sufficiente e voglio impostarlo il più alto possibile, forse 500000. La mia impostazione in limits.conf è come hai detto con la stella e il limite di Hard non si sta ancora muovendo.
iCode

1
Bene, hai scoperto che il valore di / proc / sys / fs / file-max era 188.897 ... Quindi direi che il tuo limite superiore è compreso tra 188.000 (consentito) e 500.000 (non consentito). Sconcerta l'idea che hai qualcosa che richiede oltre 65000 file aperti contemporaneamente. Wow. Di solito viene gestito su big iron. Sarei sospettoso di un malinteso sulla programmazione. (Con tutto il rispetto, per favore)
lornix,

4
ecco fatto: sessione richiesta pam_limits.so, grazie!
lethalman

13
All'inizio ho perso il carattere jolly alla fine /etc/pam.d/common-session*e appena modificato common-session, e anche dopo un riavvio non ha funzionato. Ma dopo aver aggiunto la stessa riga (per pam_limits.so) a common-session-noninteractive, ulimit -nvisualizzato il nuovo valore dopo un nuovo accesso (non è necessario il riavvio). FWIW Stavo cercando di cambiare il limite per root (solo).
Lambart,

1
controlla anche se il valore è diverso se accedi come root. superuser.com/questions/1200539/…
Robbo_UK

20

Se usi limiti soft e hard su base per utente puoi usare qualcosa come:

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

per verificare se le impostazioni funzionano per quel determinato utente o meno.


5

Ho molti problemi a farlo funzionare.

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

sudo sysctl -w fs.inotify.max_user_watches=100000

4
Ho provato questo dato che sto avendo lo stesso problema ma non ha funzionato$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.