{"id":36999,"date":"2019-10-31T22:15:13","date_gmt":"2019-10-31T19:15:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\/"},"modified":"2019-10-31T22:15:13","modified_gmt":"2019-10-31T19:15:13","slug":"haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","title":{"rendered":"Trucuri pentru lucrul cu un num\u0103r mare de fi\u0219iere mici","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ideea articolului a ap\u0103rut spontan dintr-o discu\u021bie \u00een comentariile la articol <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462849\/\">\u201eC\u00e2te ceva despre inode\u201d<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Trucuri pentru lucrul cu un num\u0103r mare de fi\u0219iere mici\" src=\"\/wp-content\/uploads\/2019\/08\/e488f5985cfb0b3274f57f6baeeedf01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProblema este c\u0103 specificitatea intern\u0103 a func\u021bion\u0103rii serviciilor noastre const\u0103 \u00een stocarea unui num\u0103r enorm de fi\u0219iere mici. \u00cen prezent, avem aproximativ sute de terabay\u021bi de astfel de date. \u0218i ne-am lovit de c\u00e2teva capcane evidente \u0219i nu foarte evidente \u0219i am reu\u0219it s\u0103 le dep\u0103\u0219im.<\/p>\n<p>De aceea \u00eemp\u0103rt\u0103\u0219esc experien\u021ba noastr\u0103, poate va fi de folos cuiva.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Prima problem\u0103: \u201eNo space left on device\u201d<\/h2>\n<p>\nA\u0219a cum s-a men\u021bionat \u00een articolul men\u021bionat anterior, problema este c\u0103 exist\u0103 blocuri libere pe sistemul de fi\u0219iere, dar inode-urile s-au terminat.<\/p>\n<p>Pentru a verifica num\u0103rul de inode-uri utilizate \u0219i disponibile, se poate folosi comanda <code>df -ih<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Trucuri pentru lucrul cu un num\u0103r mare de fi\u0219iere mici\" src=\"\/wp-content\/uploads\/2019\/08\/ceb86a22562aa08c8ffbbde2c2618545.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu voi relata articolul, pe scurt, pe disc exist\u0103 at\u00e2t blocuri pentru date, c\u00e2t \u0219i blocuri pentru metainforma\u021bii, acestea fiind inode-urile (index node). Num\u0103rul lor este stabilit la ini\u021bializarea sistemului de fi\u0219iere (vorbim despre ext2 \u0219i succesorii s\u0103i) \u0219i nu se schimb\u0103 ulterior. Echilibrul \u00eentre blocurile de date \u0219i inode-uri este calculat pe baza unor date statistice medii, \u00een cazul nostru, c\u00e2nd avem multe fi\u0219iere mici, balansul ar trebui s\u0103 se \u00eencline spre num\u0103rul de inode-uri \u2014 acestea ar trebui s\u0103 fie mai numeroase.<\/p>\n<p>\u00cen Linux, deja au fost prev\u0103zute op\u021biuni cu un echilibru diferit, iar toate aceste configura\u021bii pre-calculate se afl\u0103 \u00een fi\u0219ierul <code>\/etc\/mke2fs.conf<\/code>.<br \/>\nDe aceea, la ini\u021bializarea ini\u021bial\u0103 a sistemului de fi\u0219iere prin mke2fs, se poate indica profilul dorit.<\/p>\n<p>Iat\u0103 c\u00e2teva exemple din fi\u0219ier:<\/p>\n<pre><code class=\"json\">    small = {\n        blocksize = 1024\n        inode_size = 128\n        inode_ratio = 4096\n    }\n\n    big = {\n        inode_ratio = 32768\n    }\n\n    largefile = {\n        inode_ratio = 1048576\n        blocksize = -1\n    }\n<\/code><\/pre>\n<p>\nPute\u021bi alege op\u021biunea dorit\u0103 de utilizare folosind op\u021biunea &#171;-T&#187; la apelul mke2fs. De asemenea, pute\u021bi seta manual parametrii necesari, dac\u0103 nu exist\u0103 o solu\u021bie gata preg\u0103tit\u0103.<\/p>\n<p>Mai multe detalii sunt descrise \u00een manualele pentru <code>mke2fs.conf<\/code> \u0219i <code>mke2fs<\/code>.<\/p>\n<p>O caracteristic\u0103 care nu a fost men\u021bionat\u0103 \u00een articolul men\u021bionat anterior este posibilitatea de a stabili dimensiunea blocului de date. Este evident c\u0103 pentru fi\u0219iere mari are sens s\u0103 existe o dimensiune mai mare a blocului, iar pentru cele mici \u2014 una mai mic\u0103. <\/p>\n<p>Totu\u0219i, trebuie s\u0103 \u021binem cont de o caracteristic\u0103 interesant\u0103, \u0219i anume arhitectura procesorului.<br \/>\nM-am g\u00e2ndit odat\u0103 c\u0103 am nevoie de o dimensiune mai mare a blocului pentru fi\u0219ierele mari cu poze. A fost o chestiune de utilizare acas\u0103, pe un server de stocare de tip WD pe arhitectura ARM. F\u0103r\u0103 s\u0103 stau prea mult pe g\u00e2nduri, am setat dimensiunea blocului la 8k sau 16k \u00een loc de standardul de 4k, m\u0103sur\u00e2nd \u00een prealabil economiile. \u0218i totul a fost minunat, p\u00e2n\u0103 \u00een momentul \u00een care stocarea a cedat, dar discul era intact. Pune\u021bi discul \u00eentr-un computer obi\u0219nuit cu un procesor Intel, \u0219i am avut surpriza: dimensiune a blocului nesuportat\u0103. Ne-am \u00eempotmolit. Datele sunt acolo, totul este bine, dar nu se pot citi. procesoarele i386 \u0219i similare nu pot lucra cu dimensiuni ale blocului care nu corespund dimensiunii paginii de memorie, care este exact 4k. \u00cen esen\u021b\u0103, totul s-a terminat prin utilizarea utilitarelor din spa\u021biul utilizatorului, totul a fost lent \u0219i trist, dar datele au fost salvate. Pentru cei interesa\u021bi \u2014 c\u0103uta\u021bi dup\u0103 numele utilitarului. <code>fuseext2<\/code>. Morala: fie s\u0103 g\u00e2nde\u0219ti toate cazurile \u00een avans, fie s\u0103 nu te compor\u021bi ca un supererou \u0219i s\u0103 folose\u0219ti set\u0103rile standard pentru utilizatorii obi\u0219nui\u021bi.<\/p>\n<p>UPD. Ca urmare a observa\u021biei utilizatorului <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> clarific c\u0103 pentru i386 dimensiunea blocului nu trebuie s\u0103 dep\u0103\u0219easc\u0103 4k, dar nu trebuie neap\u0103rat s\u0103 fie exact 4k, adic\u0103 dimensiunile de 1k \u0219i 2k sunt permise.<\/p>\n<p>Deci, iat\u0103 cum am rezolvat problemele.<\/p>\n<p>\u00cen primul r\u00e2nd, ne-am confruntat cu problema c\u00e2nd discul de multe terabytes era plin de date, iar reconfigurarea sistemului de fi\u0219iere nu era posibil\u0103.<\/p>\n<p>\u00cen al doilea r\u00e2nd, aveam nevoie de o solu\u021bie urgent\u0103.<\/p>\n<p>\u00cen cele din urm\u0103, am ajuns la concluzia c\u0103 trebuie s\u0103 ajust\u0103m echilibrul, reduc\u00e2nd num\u0103rul de fi\u0219iere.<br \/>\nPentru a reduce num\u0103rul de fi\u0219iere, s-a decis s\u0103 arhiv\u0103m fi\u0219ierele \u00eentr-un singur arhiv\u0103 comun\u0103. Av\u00e2nd \u00een vedere specificitatea noastr\u0103, am arhivat toate fi\u0219ierele pentru o anumit\u0103 perioad\u0103 de timp \u0219i am efectuat arhivarea printr-o sarcin\u0103 cron zilnic, noaptea.<\/p>\n<p>Am ales arhiva zip. \u00cen comentariile de la articolul anterior s-a sugerat tar, dar exist\u0103 o dificultate: acesta nu are o tabel\u0103 de con\u021binut, iar fi\u0219ierele sunt aranjate secven\u021bial (nu degeaba \u00abtar\u00bb este un acronim pentru \u00abTape Archive\u00bb, mo\u0219tenire de la unit\u0103\u021bile de band\u0103), adic\u0103 dac\u0103 vrei s\u0103 cite\u0219ti un fi\u0219ier la sf\u00e2r\u0219itul arhivei, trebuie s\u0103 cite\u0219ti \u00eentreaga arhiv\u0103, deoarece nu exist\u0103 offset-uri pentru fiecare fi\u0219ier \u00een raport cu \u00eenceputul arhivei. A\u0219adar, aceasta este o opera\u021biune \u00eendelungat\u0103. \u00cen zip este mult mai bine: are tocmai acea tabel\u0103 de con\u021binut \u0219i offset-uri pentru fi\u0219iere \u00een interiorul arhivei, iar timpul de acces la fiecare fi\u0219ier nu depinde de pozi\u021bia sa. \u00cen cazul nostru, am putut seta op\u021biunea de compresie \u201e0\u201d, deoarece toate fi\u0219ierele au fost deja comprimate \u00een gzip.<\/p>\n<p>Clien\u021bii descarc\u0103 fi\u0219ierele prin nginx, \u0219i conform vechiului API, se specific\u0103 simplu numele fi\u0219ierului, de exemplu:<\/p>\n<pre><code class=\"plaintext\">http:\/\/www.server.com\/hydra\/20170416\/0453\/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5\n<\/code><\/pre>\n<p>\nPentru a decomprima fi\u0219ierele \u00een timp real, am g\u0103sit \u0219i conectat modulul nginx-unzip-module (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/youzee\/nginx-unzip-module\">https:\/\/github.com\/youzee\/nginx-unzip-module<\/a><\/noindex>) \u0219i am configurat dou\u0103 upstream-uri.<\/p>\n<p>Ca rezultat, am ob\u021binut urm\u0103toarea configura\u021bie:<\/p>\n<p><img decoding=\"async\" alt=\"Trucuri pentru lucrul cu un num\u0103r mare de fi\u0219iere mici\" src=\"\/wp-content\/uploads\/2019\/08\/56f5210669fecfe194ac5907d563aa1d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCele dou\u0103 gazde din set\u0103ri ar\u0103tau astfel:<\/p>\n<pre><code class=\"json\">server {\n  listen *:8081;\n\n  location \/ {\n    root      \/home\/filestorage;\n  }\n}<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"json\">server {\n  listen *:8082;\n\n  location ~ ^\/hydra\/(d+)\/(d+)\/(.*)$ {\n    root      \/home\/filestorage;\n    file_in_unzip_archivefile \"\/home\/filestorage\/hydra\/$1\/$2.zip\";\n    file_in_unzip_extract \"$2\/$3\";\n    file_in_unzip;\n  }\n}\n<\/code><\/pre>\n<p>\n\u0218i configura\u021bia upstream-urilor pe nginx-ul superior:<\/p>\n<pre><code class=\"json\">upstream storage {\n  server server.com:8081;\n  server server.com:8082;\n}\n<\/code><\/pre>\n<p>\nCum func\u021bioneaz\u0103:<\/p>\n<ul>\n<li>Clientul se \u00eendreapt\u0103 spre front nginx<\/li>\n<li>Front nginx \u00eencearc\u0103 s\u0103 livreze fi\u0219ierul din primul upstream, adic\u0103 direct de pe sistemul de fi\u0219iere<\/li>\n<li>Dac\u0103 fi\u0219ierul nu exist\u0103 \u2014 \u00eencearc\u0103 s\u0103-l ofere din al doilea upstream, care caut\u0103 fi\u0219ierul \u00een interiorul arhivei<\/li>\n<\/ul>\n<p><\/p>\n<h2>Problema a doua: din nou \u201eNo space left on device\u201d<\/h2>\n<p>\nAceasta este a doua problem\u0103 cu care ne-am confruntat c\u00e2nd erau multe fi\u0219iere \u00een director.<br \/>\n\u00cencerc\u0103m s\u0103 cre\u0103m un fi\u0219ier, iar sistemul se pl\u00e2nge c\u0103 nu mai este loc. Schimb\u0103m numele fi\u0219ierului \u0219i \u00eencerc\u0103m din nou s\u0103-l cre\u0103m.<\/p>\n<p>Reu\u0219im.<\/p>\n<p>Arat\u0103 aproximativ astfel:<\/p>\n<p><img decoding=\"async\" alt=\"Trucuri pentru lucrul cu un num\u0103r mare de fi\u0219iere mici\" src=\"\/wp-content\/uploads\/2019\/08\/f365358b59bf81d450a236dfb58e4874.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVerificarea inodes nu a dat rezultate \u2014 sunt multe libere. <br \/>\nVerificarea locului \u2014 acela\u0219i lucru.<br \/>\nNe-am g\u00e2ndit c\u0103 poate sunt prea multe fi\u0219iere \u00een director, iar pentru asta exist\u0103 o limit\u0103, dar din nou nu: Num\u0103rul maxim de fi\u0219iere pe director: ~1.3 \u00d7 10^20<\/p>\n<p>\u0218i se poate crea un fi\u0219ier, dac\u0103 schimbi numele.<br \/>\nConcluzia \u2014 problema este \u00een numele fi\u0219ierului.<\/p>\n<p>C\u0103ut\u0103rile ulterioare au ar\u0103tat c\u0103 problema este \u00een algoritmul de hashare folosit la construirea indexului directorului, la un num\u0103r mare de fi\u0219iere se observ\u0103 coliziuni cu toate consecin\u021bele care decurg din acestea. Mai multe detalii pot fi citite aici: <noindex><a rel=\"nofollow\" href=\"https:\/\/ext4.wiki.kernel.org\/index.php\/Ext4_Disk_Layout#Hash_Tree_Directories\">https:\/\/ext4.wiki.kernel.org\/index.php\/Ext4_Disk_Layout#Hash_Tree_Directories<\/a><\/noindex><\/p>\n<p>Aceast\u0103 op\u021biune poate fi dezactivat\u0103, dar\u2026 c\u0103utarea fi\u0219ierelor dup\u0103 nume ar putea deveni imprevizibil de lung\u0103 atunci c\u00e2nd trece\u021bi prin toate fi\u0219ierele. <\/p>\n<pre><code class=\"bash\"> tune2fs -O \"^dir_index\" \/dev\/sdb3\n<\/code><\/pre>\n<p>\n\u00cen general, ca solu\u021bie temporar\u0103, aceasta ar putea func\u021biona.<\/p>\n<p>Morala: un num\u0103r mare de fi\u0219iere \u00eentr-un director este de obicei r\u0103u. Nu ar trebui s\u0103 proceda\u021bi astfel.<\/p>\n<p>De obicei, \u00een astfel de cazuri, se creeaz\u0103 subdirectoare, dup\u0103 primele litere ale numelui fi\u0219ierului sau dup\u0103 alte criterii, de exemplu, dup\u0103 date, ceea ce \u00een majoritatea cazurilor ajut\u0103.<br \/>\nDar num\u0103rul total de fi\u0219iere mici r\u0103m\u00e2ne \u00eenc\u0103 o problem\u0103, chiar \u0219i atunci c\u00e2nd sunt aranjate \u00een directoare \u2014 atunci, consulta\u021bi prima problem\u0103.<\/p>\n<h2>Problema a treia: cum s\u0103 vizualiz\u0103m lista de fi\u0219iere dac\u0103 sunt multe<\/h2>\n<p>\n\u00cen situa\u021bia noastr\u0103, c\u00e2nd avem multe fi\u0219iere, cu siguran\u021b\u0103 ne-am confruntat cu problema de a vizualiza con\u021binutul unui director.<\/p>\n<p>Solu\u021bia standard este comanda <code>ls<\/code>.<br \/>\nBine, s\u0103 vedem ce rezult\u0103 din 4772098 de fi\u0219iere:<\/p>\n<pre><code class=\"bash\">\n$ time ls \/home\/app\/express.repository\/offercache\/ &gt;\/dev\/null\n\nreal\t0m30.203s\nuser\t0m28.327s\nsys\t0m1.876s\n<\/code><\/pre>\n<p>\n30 de secunde\u2026 cam mult. Este important de men\u021bionat c\u0103 cea mai mare parte a timpului este cheltuit\u0103 pe procesarea fi\u0219ierelor \u00een spa\u021biul utilizatorului, nu pe opera\u021biunile nucleului.<\/p>\n<p>Dar exist\u0103 o solu\u021bie:<\/p>\n<pre><code class=\"bash\">\n$ time find \/home\/app\/express.repository\/offercache\/ &gt;\/dev\/null\n\nreal\t0m3.714s\nuser\t0m1.998s\nsys\t0m1.717s\n<\/code><\/pre>\n<p>\n3 secunde. De 10 ori mai rapid.<br \/>\nUra!<\/p>\n<p><b>UPD.<\/b><\/p>\n<p>O solu\u021bie \u0219i mai rapid\u0103 de la utilizator <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/berez\/\" class=\"user_link\">berez<\/a><\/noindex> \u2014 dezactivarea sort\u0103rii la <code>ls<\/code><\/p>\n<pre><code class=\"bash\">\ntime ls -U \/home\/app\/express.repository\/offercache\/ &gt;\/dev\/null\nreal\t0m2.985s\nuser\t0m1.377s\nsys\t0m1.608s\n<\/code><\/pre>\n<h2>Problema a patra: un LA mare atunci c\u00e2nd lucra\u021bi cu fi\u0219iere<\/h2>\n<p>\nDin c\u00e2nd \u00een c\u00e2nd, apare situa\u021bia \u00een care trebuie s\u0103 copia\u021bi o mul\u021bime de fi\u0219iere de pe o ma\u0219in\u0103 pe alta. \u00cen acest caz, de multe ori, LA cre\u0219te considerabil, deoarece totul depinde de performan\u021ba discurilor.<\/p>\n<p>Cel mai ra\u021bional lucru pe care dori\u021bi s\u0103-l face\u021bi este s\u0103 folosi\u021bi SSD. E cu adev\u0103rat grozav. Problema este doar costul SSD-urilor de mai multe terabay\u021bi.<\/p>\n<p>Dar dac\u0103 discurile sunt obi\u0219nuite, fi\u0219ierele trebuie copiate, iar acest lucru se \u00eent\u00e2mpl\u0103 totodat\u0103 \u00eentr-un sistem de produc\u021bie, unde supra\u00eenc\u0103rcarea duce la nemul\u021bumirea clien\u021bilor? Exist\u0103 cel pu\u021bin dou\u0103 instrumente utile: <code>nice<\/code> \u0219i <code>ionice<\/code>.<\/p>\n<p><code>nice<\/code> \u2014 diminueaz\u0103 prioritatea procesului, astfel scheduler-ul aloc\u0103 mai multe quanta de timp altor procese cu prioritate mai mare.<br \/>\n\u00cen practica noastr\u0103, a fost util s\u0103 set\u0103m nice la maxim (19 \u2014 este prioritate minim\u0103, -20 (minus 20) \u2014 prioritate maxim\u0103).<\/p>\n<p><code>ionice<\/code> \u2014 de asemenea, corecteaz\u0103 prioritatea de intrare\/ie\u0219ire (I\/O scheduling)<\/p>\n<p>Dac\u0103 ave\u021bi RAID \u0219i a trebuit s\u0103 se sincronizeze brusc (dup\u0103 un reboot nereu\u0219it sau dac\u0103 trebuie s\u0103 restaura\u021bi matricea RAID dup\u0103 schimbarea unui disc), \u00een unele situa\u021bii are sens s\u0103 reduce\u021bi viteza de sincronizare, astfel \u00eenc\u00e2t celelalte procese s\u0103 poat\u0103 func\u021biona \u00eentr-un mod mai adecvat. O comand\u0103 util\u0103 pentru aceasta este:<\/p>\n<pre><code class=\"bash\">\necho 1000 &gt; \/proc\/sys\/dev\/raid\/speed_limit_max\n<\/code><\/pre>\n<p><\/p>\n<h2>Problema a cincea: Cum se sincronizeaz\u0103 fi\u0219ierele \u00een timp real<\/h2>\n<p>\nAvem acelea\u0219i cantit\u0103\u021bi uria\u0219e de fi\u0219iere pe care trebuie s\u0103 le salv\u0103m pe un al doilea server pentru a evita\u2026 Fi\u0219ierele sunt scrise constant, a\u0219a c\u0103, pentru a avea pierderi minime, trebuie s\u0103 le copiem c\u00e2t mai repede posibil.<\/p>\n<p>Solu\u021bia standard: Rsync peste SSH.<\/p>\n<p>Aceasta este o op\u021biune bun\u0103, dac\u0103 nu trebuie s\u0103 o facem la fiecare c\u00e2teva secunde. \u0218i sunt multe fi\u0219iere. Chiar dac\u0103 nu le copiem, tot trebuie s\u0103 \u00een\u021belegem ce a fost modificat, iar compararea a c\u00e2torva milioane de fi\u0219iere \u00eenseamn\u0103 timp \u0219i o \u00eenc\u0103rc\u0103tur\u0103 pe discuri.<\/p>\n<p>Adic\u0103, trebuie s\u0103 \u0219tim imediat ce trebuie copiat, f\u0103r\u0103 a lansa o compara\u021bie de fiecare dat\u0103.<\/p>\n<p>Solu\u021bia este: <code>lsyncd<\/code>. <code>Lsyncd<\/code> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/axkibe.github.io\/lsyncd\/\">Daemon pentru sincronizare live (mirror)<\/a><\/noindex>. Acesta func\u021bioneaz\u0103 tot prin rsync, dar monitorizeaz\u0103 suplimentar sistemul de fi\u0219iere pentru modific\u0103ri folosind inotify \u0219i fsevents \u0219i ini\u021biaz\u0103 copierea doar pentru fi\u0219ierele care au ap\u0103rut sau s-au modificat.<\/p>\n<h2>Problema a \u0219asea: cum s\u0103 \u00een\u021belegem cine folose\u0219te discul<\/h2>\n<p>\nAceasta probabil c\u0103 \u0219tie toat\u0103 lumea, dar, totu\u0219i, pentru a completa imaginea: pentru monitorizarea subsistemului de discuri exist\u0103 o comand\u0103 <code>iotop<\/code> \u2013 similar\u0103 cu <code>top<\/code>, dar arat\u0103 procesele care folosesc cel mai activ discurile.<\/p>\n<p><img decoding=\"async\" alt=\"Trucuri pentru lucrul cu un num\u0103r mare de fi\u0219iere mici\" src=\"\/wp-content\/uploads\/2019\/08\/56612c618469ef340a31ae446d65ed4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe altfel, vechiul \u0219i bunul top ne permite \u0219i s\u0103 \u00een\u021belegem dac\u0103 exist\u0103 probleme cu discurile sau nu. Pentru aceasta, exist\u0103 doi parametrii cei mai adecva\u021bi: <b>Load Average<\/b> \u0219i <b>IOwait<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Trucuri pentru lucrul cu un num\u0103r mare de fi\u0219iere mici\" src=\"\/wp-content\/uploads\/2019\/08\/01a0565947de65d13b0045f7180caf5d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrimul arat\u0103 c\u00e2te procese stau \u00een a\u0219teptare pentru servicii, de obicei peste 2 \u2013 deja ceva nu decurge cum trebuie. \u00cen timpul copierii active c\u0103tre serverele de backup toler\u0103m p\u00e2n\u0103 la 6-8, dup\u0103 care situa\u021bia se consider\u0103 anormal\u0103.<\/p>\n<p>Al doilea \u2013 c\u00e2t de ocupat este procesorul cu opera\u021biile de disc. IOwait &gt;10% \u2013 motiv de \u00eengrijorare, de\u0219i la serverele noastre cu un profil de sarcin\u0103 specific, avem adesea stabil 40-50%, \u0219i acesta este \u00eentr-adev\u0103r norma.<\/p>\n<p>\u00cenchei aici, de\u0219i cu siguran\u021b\u0103 sunt multe aspecte cu care nu ne-am confruntat, a\u0219tept cu pl\u0103cere comentariile \u0219i descrierile unor cazuri reale interesante.<br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/srg\/blog\/462967\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u0438\u0437 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab\u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u0431 inode\u00bb. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0448\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u043e\u043c\u0430\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043e\u0442\u0435\u043d \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442 \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0418 \u043c\u044b \u043d\u0430\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u0440\u0430\u0431\u0435\u043b\u044c\u043a\u0438 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e \u043d\u0438\u043c \u043f\u0440\u043e\u0448\u043b\u0438\u0441\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0435\u043b\u044e\u0441\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27728,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36999","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u0438\u0437 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab\u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u0431 inode\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0425\u0430\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u0438\u0437 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab\u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u0431 inode\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:15:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:15:13+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Trucuri pentru lucrul cu un num\u0103r mare de fi\u0219iere mici | ProHoster","description":"Ideea articolului a ap\u0103rut spontan din discu\u021biile din comentarii la articolul \u201eC\u00e2teva lucruri despre inode\u201d.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0425\u0430\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster","og:description":"\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u0438\u0437 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab\u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u0431 inode\u00bb.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/haki-pri-rabote-s-bolshim-chislom-melkih-fajlov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:15:13+00:00","article:modified_time":"2019-10-31T19:15:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36999","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 05:41:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:35:26","updated":"2026-01-22 05:41:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=36999"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/27728"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=36999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=36999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=36999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}