Ulimit crescente su CentOS


18

Abbiamo una scatola CentOS che sto cercando di aumentare il numero massimo di file che un utente può avere aperto. Attualmente quando corro ulimit -Snottengo 1024e ulimit -Hn4096. Ho bisogno di quel numero di circa 6000.

In /etc/sysctl.confHo impostato fs.file-max = 100000. In /etc/security/limits.confho il seguente set:

username soft nofile 6000
username hard nofile 65535

Ho effettuato il logout e ho effettuato nuovamente l'accesso come usernamema non vedo ancora le mie modifiche. Di cosa ho bisogno per cambiare questo valore?

Tutto quello che ho dentro /etc/security/limits.dè 90-nproc.conf. Ho anche assicurato che ulimit non viene chiamato nel mio .bash_profile o .bashrc.

Quando sysctl -peseguo sputa le impostazioni che desidero e mostra il valore fs.file-maxche desidero. Ma quando corro ulimit -Sn, ottengo 1048. Se provo a correre sysctl --systemottengo error: Unknown parameter "--system".


Hai provato a riavviare? Per quanto ne so, tali impostazioni vengono lette durante l'avvio del sistema.
Kamil,

Non è necessario un riavvio per questo.
Xavier Lucas,

Risposte:


14

Per forzare la /etc/sysctl.conflettura di nuovo, eseguire sysctl -p.

Il file /etc/security/limits.confviene letto dalle shell di accesso e si dovrebbe chiudere le finestre delle sessioni attive se nella GUI. Per gli accessi remoti, ha effetto sulla registrazione.


1
Ho funzionato, senza vedere cambiamenti dopo una nuova registrazione.
tubaguy50035,

@ tubaguy50035 fs.file-maxè il numero massimo di file aperti sul sistema. È un limite rigido e non verrà riflesso dalle ulimitchiamate nel tuo caso.
Xavier Lucas,

Oh ok. Non dovrei più imbattermi in troppi file aperti allora?
tubaguy50035,

@ tubaguy50035 Non correlato. È il limite rigido del sistema che sovrascriverà qualsiasi numero sopra in limits.conf. Ma limits.conf è ancora ciò che viene applicato. Potresti provare a impostare i limiti hard e soft con ulimit direttamente in una nuova sessione e vedere se ottieni gli stessi massimi? Qualcosa sembra sovrascrivere la tua configurazione.
Xavier Lucas,

Dice che l'operazione non è consentita. Devo dare all'utente l'accesso a qualcosa? Preferirei che l'utente web non avesse i privilegi di root.
tubaguy50035,

6

Come ha detto un altro poster, è necessario che sysctl imposti il ​​valore nel kernel in esecuzione. Esistono diversi modi per impostare il valore senza riavviare:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

IMHO l'ultimo metodo è il migliore, poiché replica l'ordine in cui le impostazioni verrebbero applicate durante l'avvio (e quindi in caso di conflitto diventerà evidente).

Nota: non sono sicuro di quale versione di CentOS stai usando, ma almeno su 7 ho riscontrato un problema in cui se dracut ricostruisce initramfs per qualsiasi motivo (come quando si installa un nuovo modulo del kernel) verrà copiato il contenuto di /etc/sysctl.* in initramfs, che verrà quindi eseguito da systemd-sysctl durante quella fase, anche se successivamente cancellate quelle voci da /etc/sysctl.conf.

Nel mio ambiente ho modificato il modulo dracut di systemd per escludere /etc/sysctl.* da quell'ambiente (poiché tali impostazioni verranno impostate una volta montati i rootfs e systemd-sysctl verrà eseguito nuovamente). È solo un gotcha in cui potresti imbatterti.


Sono su CentOS 6.5. Ho anche aggiornato la mia domanda con i risultati di alcuni di questi.
tubaguy50035,
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.