Come posso impostare un limite al numero di file che Linux può avere aperto?


11

Ho intenzione di eseguire un'app Java usando nohup ... &. Il limite deve essere applicato a comandi come questo.


Ma questo ha causato un errore nel mio programma java

Risposte:


7

La maggior parte dei sistemi usa PAM e ha il pam_limitsmodulo impostato limiti basati su /etc/security/limits.conf. Viene chiamato il limite per utente per i file aperti nofile. Puoi impostarlo per ogni utente o per un particolare utente o gruppo e puoi impostare un limite che l'utente può sovrascrivere (limite soft) e un altro che solo il root può ignorare (limite hard). La documentazione e la limits.confpagina man hanno i dettagli. Ad esempio, per aumentare il limite a 50000 per tutti, inserisci questa riga /etc/limits.conf(l'impostazione diventa effettiva quando accedi):

* - nofile 50000

entro limits.confdo * hard nofile 50000e / o * soft nofile 50000. Non conosco la differenza tecnica tra duro e morbido e ho sempre fatto entrambe le cose.
Ron

all'interno di SLES 11.4 usando tcsh per esempio, si può fare limit descriptors 50000per cambiare il valore all'interno della finestra / sessione del terminale data.
Ron

@ron -` nella seconda colonna imposta sia il limite soft che il limite hard. Devi solo impostarli separatamente se vuoi valori diversi. Un limite soft può essere modificato in qualsiasi momento eseguendo il ulimitcomando (chiamato limitin csh). Un utente senza privilegi non può mai superare il limite massimo.
Gilles 'SO- smetti di essere malvagio' il

se imposto solo il valore hard, il valore soft rimane quello predefinito? se imposto solo soft e non hard, hard rimane un valore predefinito o intrinsecamente uguale a soft? Posso impostare soft> hard? Il soft è il vero valore che è in vigore? scusa per le domande.
ron

@ron Il limite soft viene automaticamente limitato al limite hard. Se imposti solo il limite rigido, questo imposta il limite flessibile su max (default_soft_limit, actual_hard_limit).
Gilles 'SO- smetti di essere malvagio' il

4

puoi aggiungere fs.file-max = <your number>in /etc/sysctl.conf. Quindi riavviare.


cat / proc / sys / fs / file-max è 169203 , ma ulimit -n è 1024

Non è necessario riavviare. Corri e basta sysctl fs.file-max=123456. ( /etc/sysctl.confviene letto all'avvio da uno script che richiama sysctlil contenuto.)
Gilles 'SO- smetti di essere malvagio'

3
ulimit -n

può modificare le impostazioni per processo e

/proc/sys/fs/file-max

oppure la variabile sysctl chiamata fs.file-maxpuò essere utilizzata per leggere e impostare il valore a livello di sistema


cat / proc / sys / fs / file-max è 169203 , ma ulimit -n è 1024

1

Puoi usare ulimit per questo:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

Anche se dovresti assicurarti che l'apertura di così tanti handle di file sia assolutamente necessaria prima di ricorrere a tali aggiustamenti. Aumentare gli handle massimi di file solo perché hai dimenticato di fare un inputstream.close () in un ciclo ritarderà solo il problema sottostante.


1
Voglio collegarmi a molti clienti

1

Usa ulimit (comando Bash - man bash o trova simile per la tua shell) per istanza del programma. Non utilizzare i limiti di sistema globali se non sai cosa stai facendo - possibili DoS.


In SLES 11.4 ho posto nofilein limits.confessere con successo 100000. Posso attestare che l'impostazione di un valore troppo grande ha impedito l'accesso successivo con SSH e ho dovuto eseguire l'avvio da dvd per correggere quel valore in limits.conf per ripristinare il sistema.
ron

0
vi ~/.bashrc

E aggiungi una riga alla fine del file

ulimit -n 169203
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.