Come posso modificare il numero di limiti di file aperti in Linux? [chiuso]


194

Quando eseguo la mia applicazione, a volte viene visualizzato un errore too many files open.

L'esecuzione di ulimit -areport indica che il limite è 1024. Come posso aumentare il limite sopra 1024?

Modifica ulimit -n 2048 comporta un errore di autorizzazione.



L'ho appena passato su Centos 7 (lo stesso su RHEL) e ho pubblicato un post sul blog che lo riguardava perché avevo tanti problemi anche con tutti questi post: coding-stream-of-consciousness.com/2018/12/21/… . Spesso insieme ai file aperti, è necessario aumentare nproc che risiede effettivamente in più file di impostazioni ... e se si utilizza systemd / systemctl che ha le proprie impostazioni separate. È un po 'matto.
John Humphreys - w00te

Se si utilizza VSCode su linux questa soluzione potrebbe aiutare: stackoverflow.com/a/55027686/1190948
Juri Sinitson

Risposte:


153

Puoi sempre provare a fare un ulimit -n 2048. Ciò ripristinerà solo il limite per la shell corrente e il numero specificato non deve superare il limite rigido

Ogni sistema operativo ha una diversa impostazione del limite rigido in un file di configurazione. Ad esempio, il limite del file aperto su Solaris può essere impostato all'avvio da / etc / system.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

Su OS X, questi stessi dati devono essere impostati in /etc/sysctl.conf.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Sotto Linux, queste impostazioni sono spesso in /etc/security/limits.conf.

Esistono due tipi di limiti:

  • i limiti soft sono semplicemente i limiti attualmente applicati
  • i limiti rigidi indicano il valore massimo che non può essere superato impostando un limite morbido

I limiti soft possono essere impostati da qualsiasi utente mentre i limiti hard sono modificabili solo da root. I limiti sono una proprietà di un processo. Vengono ereditati quando viene creato un processo figlio, pertanto è necessario impostare i limiti a livello di sistema durante l'inizializzazione del sistema negli script init e i limiti dell'utente devono essere impostati durante l'accesso dell'utente, ad esempio utilizzando pam_limits.

Ci sono spesso impostazioni predefinite impostate all'avvio della macchina. Pertanto, anche se è possibile ripristinare ulimit in una singola shell, è possibile che al riavvio venga ripristinato il valore precedente. Se si desidera modificare l'impostazione predefinita, è possibile eseguire il grepping degli script di avvio per i comandi ulimit di esistenza.


4
puoi dirmi come usare questo in Windows?
Pritam,

@hoyhoy posso cambiarlo come 2048ma non come 4500perché? vedi questo
alhelal,

@GaneshKrishnan cosa aggiungere nei file linux che hai citato?
aviral sanjay,

@Pritam Windows non ne ha ulimit. È necessario specificare ciò che si sta utilizzando (ad es. WSL, Cygwin).
Melebio

99

Se stai usando Linux e hai ottenuto l'errore di autorizzazione, dovrai aumentare il limite consentito nel file /etc/limits.confo /etc/security/limits.conf(dove si trova il file dipende dalla tua specifica distribuzione Linux).

Ad esempio, per consentire a chiunque sul computer di aumentare il numero di file aperti fino a 10000, aggiungere la riga al limits.conffile.

* hard nofile 10000

Quindi disconnettersi e riconnettersi al proprio sistema e si dovrebbe essere in grado di fare:

ulimit -n 10000

senza un errore di autorizzazione.


6
NOTA: il carattere jolly non si applica rootall'utente. Devi specificare root hard nofile 10000se vuoi regolare il rootlimite.
Joshua Pinter,

1
@JoshPinter Haha, ho appena trascorso le ultime 3 ore circa durante ogni singolo tutorial su come cambiare il ulimite finalmente ho scoperto che sono loggato come root. Ecco perché ho continuato a vedere la 1024 in ulimit -a. Ho cambiato il wildcare e ho aggiunto un *interno limits.conf. Ora va tutto bene, (sto usando i tasti ssh non preoccuparti: P) - Grazie !!!
NiCk Newman,

1
@NiCkNewman Sono contento che stai ridendo! Questa è una buona caratteristica in una persona programmatore / sysops. Ho fatto la stessa cosa e non ero così gioviale. Sono contento che abbia aiutato! :)
Joshua Pinter,

Suplement: Si possono trovare anche una configurazione in questa directory: /etc/security/limits.d/.
Waldemar Wosiński,

2
Ho aperto /etc/security/limits.conf per la prima volta e ho notato che tutto è commentato là fuori. Qual è il valore predefinito di "hard nofile" allora?
ka3ak,

36

1) Aggiungi la seguente riga a /etc/security/limits.conf

webuser hard nofile 64000

quindi accedi come utente web

su - webuser

2) Modifica i seguenti due file per l'utente web

aggiungere file .bashrc e .bash_profile eseguendo

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) Disconnettersi, quindi riconnettersi e verificare che le modifiche siano state apportate correttamente:

$ ulimit -a | grep open
open files                      (-n) 64000

Questo è tutto e loro boom, boom boom.


9
Se cambiate la vostra linea in limits.conf da "hard" a "soft", questo dovrebbe diventare il nuovo default e non richiedere modifiche ai profili bash.
RishiD,

Sembra che tu stia ripetendo ulteriori passaggi. L'impostazione dei limiti da sola farà lo stesso del profilo, ma in tutte le sessioni.
Eddie,

6

Se alcuni dei tuoi servizi si rompono in ulimits, a volte è più facile inserire comandi appropriati nell'init-script del servizio. Ad esempio, quando Apache sta segnalando

[avviso] (11) Risorsa temporaneamente non disponibile: apr_thread_create: impossibile creare il thread di lavoro

Prova a mettere ulimit -s unlimiteddentro /etc/init.d/httpd. Ciò non richiede un riavvio del server.

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.