introducere: provocările precum numărul de fișiere deschise în oricare dintre mediile de producție au devenit obișnuite acum o zi. Deoarece multe aplicații care sunt bazate pe Java și bazate pe Apache, se instalează și se configurează, ceea ce poate duce la prea multe fișiere deschise, descriptori de fișiere etc. Dacă aceasta depășește limita implicită setată, atunci se pot confrunta cu probleme de control al accesului și provocări de deschidere a fișierelor. Multe medii de producție vin în impas fel de situații din cauza asta.
Din fericire, avem comanda „ulimit” în oricare dintre serverele bazate pe Linux, prin care se poate vedea/seta/obține numărul de fișiere deschise detalii de stare / configurare. Această comandă este echipată cu mai multe opțiuni și cu această combinație se poate seta numărul de fișiere deschise. Următoarele sunt comenzi pas cu pas cu exemple explicate în detaliu.
pentru a vedea care este limita actuală de fișiere deschise în orice sistem Linux
pentru a obține limita de fișiere deschise pe orice server Linux, executați următoarea comandă,
# cat /proc/sys/fs/file-max146013
numărul de mai sus arată că utilizatorul poate deschide fișierul ‘146013’ pe sesiunea de conectare a utilizatorului.
# cat /proc/sys/fs/file-max149219# cat /proc/sys/fs/file-max73906
Acest lucru indică în mod clar că sistemele de operare Linux individuale au un număr diferit de fișiere deschise. Aceasta se bazează pe dependențe și aplicații care rulează în sistemele respective.
comanda ulimit :
după cum sugerează și numele, ulimit (user limit) este utilizat pentru a afișa și a seta limita de resurse pentru utilizatorul conectat.Când rulăm comanda ulimit cu -o opțiune atunci se va imprima limita tuturor resurselor pentru utilizatorul logat. Acum să rulăm „ulimit-a” pe sistemele Ubuntu / Debian și CentOS,
sistemul Ubuntu/Debian,
shashi@Ubuntu ~}$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 5731max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimitedopen files (-n) 1024 pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) 5731virtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited
sistemul CentOS
shashi@centos ~}$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 5901max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimitedopen files (-n) 1024pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) 5901virtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited
după cum putem vedea aici diferite sisteme de operare au limite diferite stabilite. Toate aceste limite pot fi configurate/modificate folosind comanda „ulimit”.
pentru a afișa limita de resurse individuale, apoi trece parametrul individual în comanda ulimit, unele dintre parametrii sunt enumerate mai jos:
- ulimit-n –> se va afișa numărul de fișiere deschise limită
- ulimit-c –> se afișează Dimensiunea fișierului de bază
- umilit-u –> va afișa limita maximă a procesului de utilizator pentru utilizatorul conectat.
- ulimit-f –> va afișa dimensiunea maximă a fișierului pe care utilizatorul o poate avea.
- umilit-m –> va afișa dimensiunea maximă a memoriei pentru utilizatorul conectat.
- ulimit-v – > va afișa limita maximă a dimensiunii memoriei
utilizați comenzile de mai jos Verificați limitele hard și soft pentru numărul de fișiere deschise pentru utilizatorul conectat
shashi@Ubuntu ~}$ ulimit -Hn1048576shashi@Ubuntu ~}$ ulimit -Sn1024
cum să remediați problema când a fost atinsă limita numărului de fișiere maxime ?
Să presupunem că serverul nostru Linux a atins limita numărului maxim de fișiere deschise și dorim să extindem această limită la nivel de sistem, de exemplu dorim să setăm 100000 ca limită a numărului de fișiere deschise.
utilizați comanda sysctl pentru a trece fs.fișier-max parametru pentru a kernel pe zbor, executa sub comanda ca utilizator root,
root@ubuntu~]# sysctl -w fs.file-max=100000fs.file-max = 100000
modificările de mai sus vor fi active până la următoarea repornire, astfel încât să facă aceste modificări persistente în întreaga repornire, editați fișierul/etc / sysctl.conf și adăugați același parametru,
root@ubuntu~]# vi /etc/sysctl.conffs.file-max = 100000
salvați și ieșiți din fișier,
rulați comanda de dedesubt pentru a face modificările de mai sus în vigoare imediat fără deconectare și repornire.
root@ubuntu~]# sysctl -p
verificați acum dacă noile modificări sunt în vigoare sau nu.
root@ubuntu~]# cat /proc/sys/fs/file-max100000
utilizați comanda de mai jos pentru a afla câți descriptori de fișiere sunt utilizați în prezent:
# more /proc/sys/fs/file-nr1216 0 100000
notă:- comanda „sysctl-p” este utilizată pentru a comite modificările fără repornire și deconectare.
setați limita de resurse la nivel de utilizator prin limită.fișier conf
„/etc/sysctl.conf ” fișier este folosit pentru a seta sistemul limită de resurse la nivel, dar dacă doriți să setați limita de resurse pentru utilizator specific, cum ar fi Oracle, MariaDB și Apache, atunci acest lucru poate fi realizat prin „/etc/security/limits.conf ” fișier.
limita eșantionului.conf este prezentat mai jos,
root@ubuntu~]# cat /proc/sys/fs/file-max
Să presupunem că vrem să setăm limita hard și soft pe numărul de deschideți fișierele pentru utilizatorul linuxtechi și pentru utilizatorul Oracle setați limita hard și soft la numărul de procese deschise, editați fișierul „/etc/security/limits.conf ” și adăugați următoarele linii
# hard limit for max opened files for linuxtechi userlinuxtechi hard nofile 4096# soft limit for max opened files for linuxtechi userlinuxtechi soft nofile 1024# hard limit for max number of process for oracle useroracle hard nproc 8096# soft limit for max number of process for oracle useroracle soft nproc 4096
Salvați& ieșiți din fișier.
notă: În cazul în care doriți să puneți limita de resurse pe un grup în loc de utilizatori, atunci poate fi posibilă și prin limit.fișierul conf, în locul numelui de utilizator , tastați @<Group_Name> și restul elementelor vor fi aceleași, exemplul este prezentat mai jos,
# hard limit for max opened files for sysadmin group@sysadmin hard nofile 4096 # soft limit for max opened files for sysadmin group@sysadmin soft nofile 1024
verificați dacă noile modificări sunt în vigoare sau nu,
~]# su - linuxtechi~]$ ulimit -n -H4096~]$ ulimit -n -S1024~]# su - oracle~]$ ulimit -H -u8096~]$ ulimit -S -u4096
notă: altă comandă folosită în mare măsură este „lsof” care este folosit pentru a afla „câte fișiere sunt deschise în prezent”. Această comandă este foarte utilă pentru administratori.
concluzie:
asa cum am mentionat in sectiunea de introducere comanda „ulimit” este foarte puternica si ajuta la configurarea si asigurarea instalarii aplicatiilor fara blocaje. Această comandă ajută la stabilirea multe din numărul de limitări de fișiere în servere bazate pe Linux.