Tuning de performanță, freebsd

Sistemul FreeBSD cachează în memorie datele care au fost accesate recent, deoarece aceleași date sunt citite foarte des de pe disc. Dacă informațiile sunt stocate în memoria RAM, pot fi obținute foarte rapid. Dacă sistemul necesită mai multă memorie, acesta împinge cele mai vechi intrări din memoria cache, făcând loc pentru noi date.

De exemplu, ieșirea de sus (1) a fost discutată pe laptopul meu. Am rulat Firefox pentru a-mi viziona comicurile. * Indicatorul de disc clipea o clipă în timp ce programul a fost citit de pe disc. Apoi am închis browser-ul pentru a începe, dar FreeBSD a lăsat Firefox în memoria cache tampon. Când am reînceput Firefox, a fost apelat din cache, nu de pe disc, așa că a început mult mai repede. Rulați un alt proces mare, ar "împinge" browserul web din cache pentru a pune un nou program în el.

Dacă sistemul dvs. funcționează așa cum ar trebui, aveți cel puțin câteva megabytes de memorie liberă. Parametrii sysctl vm.v_free_target și hw.pagesize vă vor spune cât de multă memorie liberă ar trebui să fie în sistem, în conformitate cu FreeBSD. Dacă există mai multă memorie liberă decât produsul valorilor acestor doi parametri, atunci sistemul dvs. nu își utilizează pe deplin potențialul. De exemplu, pe laptop-ul meu:

# sysctl vm.v_free_target
vm.v_free_target: 13745
# sysctl hw.pagesize
hw.pagesize: 4096

Sistemul meu consideră că este necesar să aibă cel puțin 13.745 x 4.096 = 56.299.520 octeți sau aproximativ 54 MB de memorie liberă. Aș putea să pierd un gigabyte de memorie pe laptopul meu fără să mă ciocnesc, dacă nu am suferit din cauza lipsei de memorie.

Dacă sistemul are o mulțime de memorie ocupată de o memorie cache sau de un buffer, atunci nu lipsește memoria. Memoria suplimentară poate fi utilă, dar disponibilitatea acesteia nu este strict necesară. Dacă nu există suficientă memorie liberă în sistem, ci o mulțime de memorie activă și conectată, atunci sistemul nu are memorie. RAM suplimentar vă permite să profitați de cache-ul tampon.

În cazul lipsei de spațiu liber și a unui minim de spațiu (sau a lipsei acestuia) în memoria cache sau tampon, este necesar să se afle unde se consumă memoria. Este posibil ca sistemul să nu fie suficient. De îndată ce sistemul începe să utilizeze spațiul de swap, lipsa memoriei va înceta să fie simțită ca ceva ipotetic.

Schimbați spațiul

Schimbul de spațiu (spațiul de swap) ajută la o lipsă de memorie pe termen scurt. De exemplu, un fișier uriaș dezarhivat poate umple cu ușurință toată memoria fizică, iar sistemul va trebui să utilizeze un sistem virtual. Nu cumpărați memorie suplimentară, dacă este utilizată numai din când în când, puteți face schimbul.

Pur și simplu, schimbarea este oarecum asemănătoare vinului. Un pahar - altul din când în când nu va face rău, nici măcar utile, dar libațiile regulate abundente sunt un flagel.

Procesorul poate efectua o mulțime de operații pe secundă. Dar dacă executați mai multe activități decât procesorul poate servi, interogările sunt așteptate în sus. Ele se vor acumula, iar sistemul își va încetini activitatea. Deci, pe scurt, procesorul funcționează.

Dacă performanța nu este niciodată inferioară, iar partea de sus (1) indică faptul că procesorul este de aproximativ 100% din timpul său, este timpul să faceți ceva. Poți, bineînțeles, să cumperi unul nou, dar există și alte opțiuni. De exemplu, puteți examina procesele care rulează în sistem și puteți afla dacă toate acestea sunt necesare. Senior Junior sysadmin a instalat clientul SETI @ Home (/ usr / ports / astro / setiathome) pentru a căuta străinii de la procesor? Sunt programele importante o dată, dar nu acum? Găsiți și completați procesele inutile. De asemenea, asigurați-vă că acestea nu vor fi pornite data viitoare când sistemul pornește.

După ce ați finalizat acești pași, măsurați din nou performanța sistemului. Dacă problema persistă, încercați să reprogramați procesele sau să schimbați prioritățile.

reeșalonare

Schimbarea priorităților cu frumos

Dacă reprogramarea nu ajută, rămâne să schimbați prioritățile, ceea ce este puțin mai complicat. Schimbând prioritatea, instruiți sistemul FreeBSD să schimbe importanța acestui proces. Să presupunem că există un program care poate funcționa ore întregi, dar vrem să ocupe resurse doar în acele momente în care sistemul nu este ocupat de nimic altceva. În acest caz, ar trebui să cereți programului să fie frumos și să renunțe la alte programe.

Cu cât procesul este mai politicos, cu atât mai puțin timpul pe care îl cere CPU-ul. În mod prestabilit, curtoazia este de 0, dar valoarea sa poate fi în intervalul de 20 (proces foarte amabil) până la -20 (complet inconfortabil). Se pare că această abordare pune totul pe cap - cum, pentru că un număr mai mare ar trebui să însemne o prioritate mai mare! Cu toate acestea, aici punctul este în termenul însuși; Nu cred că ar fi mai bine să numim acest indicator "neliniștit" sau "capricios". *

Pe ecranul de sus (1), prioritățile procesului sunt afișate în coloana PRI. FreeBSD calculează prioritățile proceselor, ținând cont de diferiți factori, inclusiv de curtoazie și, ori de câte ori este posibil, sistemul încearcă să lanseze primele procese cu priorități mari. Amabilitatea afectează prioritățile, însă prioritățile nu pot fi schimbate direct.

Dacă știți că sistemul funcționează la limita capacităților sale, programele pe care le executați pot fi atribuite gradului de curtoazie prin folosirea unui program frumos (1). Specificați nivelul dorit de curtoazie cu ajutorul comenzii nice-n și a unei valori numerice înainte de comanda însăși. De exemplu, rulați make worldworld cu un nivel de curtoazie de 15:

# frumos -n 15 face buildworld

Valori de curtoazie negative, cum ar fi frumos -n -5. se poate atribui doar rădăcină. De exemplu, dacă aveți nevoie să compilați și să puneți un nucleu important pe kernel cât mai curând posibil, specificați o valoare negativă a curtoaziei:

# cd / usr / src
# nice -n -20 face kernel

De regulă, atunci când executați programul, nu este necesar să specificați nivelul de curtoazie, dar de multe ori este nevoie să modificați nivelul de curtoazie în zbor, atunci când se constată că procesul a ocupat complet resursele sistemului. Pentru aceasta, introduceți comanda renice (8) cu PID sau proprietarul procesului. Pentru a schimba curtoazia procesului, rulați renice. specificând o nouă valoare de curtoazie și un identificator de proces ca argument.

De exemplu, unul dintre sistemele mele efectuează logarea unei gazde pe care rulează câteva cazuri de softflowd (8), de captare a fluxului, de Nagios și de alte sisteme critice de întreținere a rețelei. În plus, în acest sistem funcționează și alte componente software, cum ar fi serverul CVSup utilizat de gazdele interne de rețea. Dacă găsesc că serverul CVSup începe să interfereze cu monitorizarea rețelei Nagios sau cu serverul syslogd (8), trebuie să fac ceva. Reducerea priorității cvsupd (8) va încetini activitatea clienților, dar acest lucru este mai bun decât încetinirea sistemului de monitorizare a rețelei. Folosind pgrep (1), definim PID-ul procesului cvsupd (8):

# pgrep cvsupd
993
# renice 10,993
993: prioritatea veche 0, noua prioritate 10

Bam! Acum, FreeBSD va planifica procesul cvsupd pentru execuție mai puțin frecvent decât alte procese. Desigur, utilizatorii serviciului vor fi foarte nefericiți, dar din moment ce principalul utilizator este eu și sunt deja nemulțumit, înseamnă că totul se face corect.

Modificați nivelul de curtoazie al tuturor proceselor inițiate de un anumit utilizator, permite comutarea -u. De exemplu, pentru a da proceselor mele mai multă importanță decât toate celelalte procese, introduc o astfel de comandă:

# renice -5 -u mwlucas
1001: prioritatea veche 0, noua prioritate -5

Numărul 1001 este ID-ul meu de utilizator în acest sistem. Din nou, remarcăm că am motive serioase să o fac. Și nu numai atunci, pentru a-și arăta puterea. * În mod similar, dacă un utilizator a ocupat complet discul I / O, pot face procesele sale foarte, foarte amiabile, care, cel mai probabil, vor salva alți utilizatori de probleme.

frumos și tcsh

Carcasa tcsh (1) are o comandă încântătoare încorporată. Această comandă încorporată folosește sintaxa comenzii renice (8), care este diferită de comanda nice (1). Presupun că acest lucru a fost făcut pentru a nu provoca nemulțumirea utilizatorilor tcsh, dar încă nu găsesc argumente rezonabile. Dacă doriți absolut să folosiți utilitarul extern (1), sunați-l cu calea completă la fișierul executabil: / usr / bin / nice.

Cercetare de software

Am discutat mult despre configurarea performanței FreeBSD. Și acest lucru este destul de logic, deoarece această carte este dedicată sistemului de operare al FreeBSD. Dar nu uitați de alte programe! De multe ori, puteți face față problemelor de performanță prin ajustarea programelor care provoacă aceste probleme. De exemplu, am un set de scripturi CGI în Perl care lucrează din greu cu discuri și consumă cu greu timpul procesorului. Ca urmare a căutării Google, am aflat că aceste scripturi vor funcționa mai bine în mod_perl2. Am schimbat configurația serverului web și problema a fost eliminată. Este mult, mult mai ușor decât schimbarea configurației sistemului.

Acum, că ați învățat să vedeți problemele care apar în sistem, este timpul să învățați să auziți ceea ce sistemul încearcă să vă spună.

blocaje

Fiecare sistem are blocaje care limitează performanța. Dacă eliminați o strangulare (bottleneck), performanța va crește până când va ajunge la următoarea strangulare. Performanța sistemului este limitată de viteza celei mai lente componente. Deci, adesea viteza unui server web este determinată de lățimea de bandă a rețelei, deoarece cea mai lentă componentă a sistemului este conectarea la Internet. Dacă actualizați un echipament T1 existent cu o lățime de bandă de 1,5 Mbit / s la OS-48 cu o lățime de bandă de 2,4 Gbit / s, sistemul va livra pagini web la viteza cu care vor permite alte componente. Cerința de a elimina blocajele înseamnă adesea "eliminarea blocajelor care apar în timpul sarcinii normale".

Articole similare