Introduzione: Sfide come il numero di file aperti in qualsiasi ambiente di produzione sono diventate comuni ormai ogni giorno. Poiché molte applicazioni basate su Java e Apache vengono installate e configurate, il che potrebbe portare a troppi file aperti, descrittori di file ecc. Se questo supera il limite predefinito impostato, è possibile che si verifichino problemi di controllo dell'accesso e apertura dei file sfide. Molti ambienti di produzione si bloccano per questo motivo.
Fortunatamente, abbiamo "ulimit ” comando in uno qualsiasi dei server basati su Linux, tramite il quale è possibile vedere/impostare/ottenere il numero di file aperti sullo stato/dettagli di configurazione. Questo comando è dotato di molte opzioni e con questa combinazione è possibile impostare il numero di file aperti. Di seguito sono riportati i comandi passo passo con esempi spiegati in dettaglio.
Per vedere qual è l'attuale limite di file aperti in qualsiasi sistema Linux
Per ottenere il limite di file aperti su qualsiasi server Linux, eseguire il comando seguente,
[[email protetta] ~]# cat /proc/sys/fs/file-max146013
Il numero sopra indica che l'utente può aprire il file "146013" per sessione di accesso utente.
[[email protetta] ~]# cat /proc/sys/fs/file-max149219[[email protetta] ~]# cat /proc/sys/fs/file-max73906
Ciò indica chiaramente che i singoli sistemi operativi Linux hanno un numero diverso di file aperti. Si basa su dipendenze e applicazioni in esecuzione nei rispettivi sistemi.
comando ulimit :
Come suggerisce il nome, ulimit (limite utente) viene utilizzato per visualizzare e impostare il limite delle risorse per l'utente connesso. Quando eseguiamo il comando ulimit con l'opzione -a, stamperà il limite di tutte le risorse per l'utente connesso. Ora eseguiamo "ulimit -a ” su sistemi Ubuntu/Debian e CentOS,
Sistema Ubuntu/Debian ,
[email protected] ~}$ ulimit -acore file size (blocchi, -c) 0data seg size (kbytes, -d) priorità di pianificazione illimitata (-e) 0dimensione file (blocchi, -f) segnali in sospeso illimitati 5731Max Memoria bloccata (KBytes, -L) 64Max Dimensione della memoria (KBytes, -M) File UnlimitedOpen (-N) 1024 Dimensione del tubo (512 byte, -P) 8 code di messaggi (byte, -q) 819200real -time priorità (-r ) 0dimensione stack (kbyte, -s) 8192 tempo cpu (secondi, -t) numero massimo di processi utente illimitato (-u) 5731 memoria virtuale (kbyte, -v) blocchi file illimitati > >Sistema CentOS
[email protected] ~}$ ulimit -acore file size (blocchi, -c) 0data seg size (kbytes, -d) priorità di pianificazione illimitata (-e) 0dimensione file (blocchi, -f) segnali in sospeso illimitati 5901max memoria bloccata (kbytes, -l) 64max memoria size (kbytes, -m) file aperti illimitati (-n) 1024dimensioni pipe (512 byte, -p) 8POSIX code di messaggi (byte, -q) 81 9200- priorità in tempo reale) 9200 0dimensione stack (kbytes, -s) 8192cpu time (secondi, -t) numero massimo illimitato di processi utente (-u) 5901memoria virtuale (kbytes, -v) illimitato blocchi fileCome si può vedere qui, diversi sistemi operativi hanno limiti diversi impostati. Tutti questi limiti possono essere configurati/modificati usando il comando “ulimit”.
Per visualizzare il limite di risorse individuali, quindi passare il parametro individuale nel comando ulimit, alcuni dei parametri sono elencati di seguito:
- ulimit -n –> Mostrerà il limite del numero di file aperti
- ulimit -c –> Visualizza la dimensione del file principale
- umilit -u –> Visualizza il limite massimo di processi utente per l'utente che ha effettuato l'accesso.
- ulimit -f –> Mostrerà la dimensione massima del file che l'utente può avere.
- umilit -m –> Visualizza la dimensione massima della memoria per l'utente che ha effettuato l'accesso.
- ulimit -v –> Visualizzerà il limite massimo della dimensione della memoria
Usa i comandi seguenti per controllare i limiti hardware e software per il numero di file aperti per l'utente che ha effettuato l'accesso
[email protetta] ~}$ ulimit -Hn1048576[email protetta] ~}$ ulimit -Sn1024
Come risolvere il problema quando è stato raggiunto il limite del numero massimo di file?
Supponiamo che il nostro server Linux abbia raggiunto il limite del numero massimo di file aperti e desideriamo estendere tale limite a tutto il sistema, ad esempio vogliamo impostare 100000 come limite del numero di file aperti.
Usa il comando sysctl per passare il parametro fs.file-max al kernel al volo, esegui il comando sotto come utente root,
[email protetta]~]# sysctl -w fs.file-max=100000fs.file-max =100000
Le modifiche di cui sopra saranno attive fino al prossimo riavvio, quindi per rendere queste modifiche persistenti durante il riavvio, modifica il file /etc/sysctl.conf e aggiungi lo stesso parametro,
[email protetta]~]# vi /etc/sysctl.confs.file-max =100000
salva ed esci dal file,
Esegui il comando sottostante per rendere immediatamente effettive le modifiche precedenti senza disconnettersi e riavviare.
[email protetta]~]# sysctl -p
Ora verifica se le nuove modifiche sono in vigore o meno.
[email protetta]~]# cat /proc/sys/fs/file-max100000
Usa il comando seguente per scoprire quanti descrittori di file sono attualmente utilizzati:
[[email protetta] ~]# altro /proc/sys/fs/file-nr1216 0 100000
Nota:- Comando "sysctl -p ” viene utilizzato per confermare le modifiche senza riavviare e disconnettersi.
Imposta il limite delle risorse a livello di utente tramite il file limit.conf
“/etc/sysctl.conf ” viene utilizzato per impostare il limite delle risorse a livello di sistema, ma se si desidera impostare il limite delle risorse per utenti specifici come Oracle, MariaDB e Apache, è possibile ottenerlo tramite “/etc/security/limits.conf ” file.
L'esempio Limit.conf è mostrato di seguito,
[email protetta]~]# cat /proc/sys/fs/file-max
Supponiamo di voler impostare un limite hard e soft sul numero di file aperti per l'utente linuxtechi e per l'utente Oracle impostare un limite hard e soft sul numero di processi aperti, modificare il file "/etc/security/limits.conf" e aggiungere quanto segue righe
# limite rigido per il numero massimo di file aperti per linuxtechi userlinuxtechi hard nofile 4096# limite per il numero massimo di file aperti per linuxtechi userlinuxtechi soft nofile 1024# limite per il numero massimo di processi per oracle useroracle hard nproc 8096# limite per il numero massimo di processo per oracle useroracle soft nproc 4096
Salva ed esci dal file.
Nota: Nel caso in cui desideri limitare le risorse a un gruppo anziché agli utenti, è possibile anche tramite il file limit.conf, al posto del nome utente , digita @
# limite massimo per il numero massimo di file aperti per sysadmin group@sysadmin hard nofile 4096 # limite minimo per il numero massimo di file aperti per sysadmin group@sysadmin soft nofile 1024
Verifica se le nuove modifiche sono in vigore o meno,
~]# su - linuxtechi~]$ ulimit -n -H4096~]$ ulimit -n -S1024~]# su - oracle~]$ ulimit -H -u8096~]$ ulimit -S -u4096
Nota:l'altro comando maggiormente utilizzato è "lsof ” che viene utilizzato per scoprire “quanti file sono aperti attualmente”. Questo comando è molto utile per gli amministratori.
Conclusione:
Come accennato nella sezione introduttiva, il comando "ulimit" è molto potente e aiuta a configurare e assicurarsi che le installazioni delle applicazioni siano più fluide senza alcun collo di bottiglia. Questo comando aiuta a correggere molte delle limitazioni dei file nei server basati su Linux.