Kaip padidinti vienu metu vykstančius „Apache“ ryšius

Šiandien ateinu dar kartą pakalbėti su jumis apie vieną iš dažniausiai naudojamų žiniatinklio paslaugų pasaulyje: žiniatinklio serverį Apache2.

Tai tema, apie kurią kalbėta daug kartų, bet dabar aš jums pasakoju apie dar vieną funkciją, į kurią reikia atsižvelgti naudojantis šia paslauga: Vienalaikių ryšių riba. Nesvarbu, ar turime labai paprastą, ar erdvėlaivį su i7 procesoriumi ir 32 GB RAM ...

Vienalaikių ryšių riba visada bus ta pati, nebent imsimės tinkamų priemonių, o tai reiškia, kad jei norime, kad vienu metu būtų prisijungę daug žmonių, mums reikės ne tik geros aparatūros, bet ir geros konfigūracijos.

Šiuo atveju nieko nereikia diegti, viskas remiasi paprastomis koncepcijomis, į kurias reikia atsižvelgti konfigūruojant apache; sąvokos, kurios turi būti labai aiškios prieš norint atlikti bet kokius pakeitimus.

apache2_logo

Pirmiausia reikia pagalvoti apie tai: kokį pajėgumą turi mano komanda? Kiek tuo pačiu metu mano įranga gali palaikyti, jei aš ją priverstu kuo daugiau? Visa tai priklauso nuo vieno veiksnio; RAM (laisvosios kreipties atmintis).

Kuo didesnė RAM, tuo didesnis jungčių skaičius, nors nėra fiksuotos vertės (tai yra X klientai kiekvienam X ram), todėl pirmiausia svarbu atlikti keletą nedidelių skaičiavimų mūsų žiniatinklio serveryje su siekiant sužinoti mūsų ribas.

Pirmas dalykas, kurį turėtumėte žinoti, yra tai, kiek RAM atminties vidutiniškai sunaudoja kiekvienas ryšys su „Apache“, nes kiekvienas užmegztas ryšys reiškia tam tikrą RAM suvartojimą sistemoje ... Akivaizdu, kad ne visos jungtys sunaudoja tą patį RAM, su kuriuo turėtumėte padaryti laikmeną ... Visa tai galite gauti naudodami šią komandą:

ps -ylC apache2 - rūšiuoti: rss | awk '{SUM + = 8 USD; I + = 1} PABAIGA {spausdinti SUM / I / 1024} '

Gautas rezultatas būtų pateiktas megabaitais ir gali skirtis priklausomai nuo aktyvių ryšių skaičiaus, pasiekiamų puslapių tipo ir kt. Todėl patartina testą atlikti su skirtingais atidarytais skirtukais; kiekvienas iš jų, jei įmanoma, rodo skirtingą turinį. Pavyzdžiui, mano atveju rezultatas buvo 9.5458, o jei suapvalinsime iki viršaus, tai būtų 10 MB Vidutiniškai suvartota RAM už vieną ryšį.

Taip pat svarbu žinoti, kiek RAM sunaudoja likę procesai, kurie yra aktyvūs sistemoje, nes žiniatinklio paslauga nėra vienintelė, kuri veikia operacinėje sistemoje, todėl būtina palikti laisvą RAM atmintį serverį, kad jis galėtų atlikti likusias užduotis. Tai galima gauti naudojant žemiau pateiktą komandą:

ps -N -ylC apache2 - rūšiuoti: rss | awk '{SUM + = $ 8} END {print SUM / 1024}'

Gautas rezultatas taip pat būtų pavaizduotas megabaitais, ir tai mums tiksliai parodytų likusių procesų suvartotos RAM kiekį; Mano atveju 800 MB. Turėdami šią informaciją galėtume bendrai apskaičiuoti tuo pačiu metu galimų turėti ryšių skaičių; Skaičiuoju, kad gautume atlikdami labai paprastą operaciją.

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

Turėdami šią formulę, įsivaizduokime, kad turime kompiuterį su 4 GB RAM, tai yra, 4096 MB, ir kad mūsų kompiuteris parodė minėtus rezultatus; apskaičiuoti būtų:

(4096 - 800) / 10 = 329 vienu metu atliekami ryšiai

Šio skaičiavimo problema yra ta, kad vienas yra per daug kraštutinis, nes jis sunaudotų visą RAM (todėl serveris sunaudotų apsikeitimą), taip pat, jei turite duomenų bazę, pvz., „MySQL“ ar bet kurią kitą, taip pat sunaudotų jungtys su ja. RAM, kuria gautą skaičių galima kvalifikuoti kaip utopinį. Todėl norėdami atlaisvinti atmintį galimiems papildomiems procesams ir atsižvelgdami į galimybę, kad bus vykdomi ryšiai su duomenų baze, sumažintume prisijungimų prie 250.

Dabar, kai turime maksimalų vienu metu esančių ryšių skaičių, turėtume paruošti „Apache“, kad gautų šį numerį, o tai daroma šio skambučio konfigūracijos faile apache2.conf, kuris yra talpinamas / etc / apache2.

Aptariamas failas yra pagrįstas struktūra moduliai, kiekvienas su atitinkamu pavadinimu, bet mus domintų tik vienas iš jų, kurio vardas yra  mpm_prefork_module. Aptariamas modulis pagal nutylėjimą turi šiuos duomenis:

„StartServers 5 MinSpareServers 5“ „MaxSpareServers 10“ „MaxClients“ 150 „MaxRequestsPerChild“ 0

Šis modulis turi labai svarbių parametrų seriją, nors yra vienas iš jų, kuris mus ypač domintų, vadinamas MaxClients. Šis parametras nurodo maksimalų vienu metu esančių ryšių skaičių ir turėtų būti pakeistas į 250.

Viena detalė, į kurią reikia atsižvelgti, yra ta, kad kai minėtame parametre nurodoma kita nei numatytoji reikšmė, prieš PRIĖMANT, reikia pridėti dar vieną. Šis parametras vadinamas ServerLimit ir nustato jungčių, kurias serveris galėtų „laikyti“ ribą, net kai yra už ribos ribų.

„ServerLimit“ parametras visada turi būti šiek tiek didesnis nei „MaxClients“, ir čia, kadangi yra nedaug manevro galimybių, 270. Taip modulis atrodytų taip:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 270 MaxClients 250 MaxRequestsPerChild 0

Dabar reikės tik iš naujo paleisti „Apache“ paslaugą naudojant komandą: 

/etc/init.d/apache2 paleiskite iš naujo

Tai jau galėtume mėgautis optimizuotu interneto serveriu.

Sveikinimai.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   zetatinas sakė

    Ačiū už įrašą!

    1.    Drassillas sakė

      Džiaugiuosi, kad jums tai buvo naudinga.

      Sveikinimai.

  2.   Miguel Angel sakė

    Yra būdas susieti su „Apache“ ir dviem serveriais, ar galite paaiškinti, kaip tai veikia?

    1.    Drassillas sakė

      Nors skaičiau apie tai teoriją, niekada netaikiau jos praktikai. Nepaisant to, galbūt šis straipsnis gali suteikti jums tam tikrų patarimų, nors kartoju, kad neturėjau galimybės jų pritaikyti praktiškai:

      http://www.muspells.net/blog/2011/04/alta-disponibilidad-con-apache2-y-heartbeat-en-debian-squeeze/

    2.    Eduardo Jalilas sakė

      Jūs ilgai klausėte, jei neišsprendėte; Aš turiu balansavimo schemą su trečiąja šalimi, kuri veikia kaip failų sistema. Jūs nurodote aplankus, esančius var / www / html / (mano atveju), į failų sistemą, taigi jie dalijasi ta pačia informacija ir galbūt jūs reikalauti virtualaus IP, kuris reaguotų ir nukreiptų į apache ips, tam galite užimti haproksi ir, jei norite, kad tai būtų labai prieinama, galite integruoti palaikomąjį ryšį, jei vienas kris, kitas ir toliau atsakys, arba jei jau turite programos domeną, galite išlaikyti pusiausvyrą su svarais, atliekančiais abiejų serverių atsargines kopijas. Tam tikrais atvejais, pvz., „moodle“ ar tam tikroms programoms, kurios jungiasi prie „mysql“ duomenų bazės, turėtumėte sukurti kiekvienos programos serverio vartotoją, kuris nurodytų tą pačią duomenų bazę. .

  3.   šamaru sakė

    Labai ačiū už įrašą, jūs esate visiškai teisus, avinas yra pagrindinis skaičiavimas, nors aš įsivaizduoju, kad mes taip pat apskaičiuojame maksimalų procesorių skaičių, kurį gali atlikti mūsų procesorius (žinoma, pirmiausia atlikdami pagrindinės atminties skaičiavimą) ir kaip diskas bus paskirstytas kietai (pavyzdiniai skaidiniai / var = 1TR).

    1.    Drassillas sakė

      Tu teisus; viskas yra svarbu, kaip, be kita ko, temperatūros kontrolė. Akivaizdu, kad galingas procesorius gali vienu metu labai efektyviai atlikti didesnį skaičių užduočių, tačiau šio pranešimo tikslas buvo paaiškinti RAM svarbą, atsižvelgiant į tuo pačiu metu veikiančių ryšių skaičių.

      Geras būdas kontroliuoti visus šiuos veiksnius ir sužinoti, ar mūsų procesorius nėra prisotintas, ar turime mažai laisvos RAM, būtų naudojant „bash“ scenarijų. Gal šis prieš kelias dienas parašytas įrašas bus įdomus jums, kurį palikau šioje nuorodoje; Tai yra pasaulinė stebėsena, tačiau ji gali būti įdomi vienam:

      http://bytelearning.blogspot.com.es/2015/07/controlando-la-salud-del-equipo-con-bash.html

      saludos

  4.   Sergio S. sakė

    Labai gera pastaba, labai ačiū!

    1.    Drassillas sakė

      Labai ačiū! Tikiuosi, kad galėjai tuo pasinaudoti.

  5.   klounas sakė

    Nenoriu būti niekše ...
    ... Bet padidinę ryšių skaičių nepaliekate labiau pažeidžiami DDoS atakos?

    1.    Drassillas sakė

      Tai nėra tylus kretino klausimas. Tiesa ta, kad didindami vienu metu esančių ryšių skaičių, mes iš dalies sustipriname „Apache“ nuo DDOS atakų, nes jūs turite atsižvelgti į tai, kad didžiausių vienu metu serveryje užmegztų ryšių skaičius yra bendras maksimalus ryšių skaičius, o ne tų, kurie gaunami iš vienas vartotojas. Taigi, nors pradžioje mes galėjome palaikyti tik 150 vienu metu veikiančių ryšių (nesvarbu, ar jie yra ryšiai iš teisėto šaltinio, ar ne), dabar galime tikėtis tiek, kiek palaiko mūsų serveris, reikalaujant, kad tuo pačiu metu būtų didesnis ryšių skaičius, kad nebūtų paslaugą. Akivaizdu, kad maksimalaus ryšių skaičiaus padidinimas nėra būdas apsisaugoti nuo tokio tipo atakų, bet turėtumėte įgyvendinti užkardos politiką. Pavyzdžiui, jei jūsų norima įdėti interneto paslauga bus veikiama interneto, saugumo priemonė, kurią būtų galima įgyvendinti, būtų šių eilučių pridėjimas prie mūsų užkardos:

      „iptables“ -A INPUT -p tcp –syn –port 80 -m connlimit –connlimit-up to 10 -m state-state NAUJAS -j ACCEPT

      „iptables“ -A INPUT -p tcp –porto 80 -m būsena – valstija NUSTATYTA, SUSIJED -j PRIIMTI

      iptables -A ĮVADAS -p tcp –portas 80 -j DROP

      1.    klounas sakė

        Viena iš DDoS atakų ypatybių yra ta, kad užpuolikas gali siųsti paketus iš kelių skirtingų krypčių, o tai neleidžia paketams tekėti tik iš vienos pusės.

    2.    Drassillas sakė

      Jūs esate teisus ta prasme, kad tokia ugniasienė, kokią sukūriau, nėra labai efektyvi prieš DDOS ataką, nes ji gaunama iš skirtingų šaltinių. Vis dėlto geriau apriboti jungčių skaičių iki 10 kiekvienam iš šių šaltinių, o ne nustatyti ribą, kad kiekvienas šaltinis galėtų užmegzti šimtą ar daugiau ryšių.

      Bet kokiu atveju klausimo rinkinys yra tas, kad kuo daugiau serverio palaikytų vienu metu esančių ryšių, tuo sunkiau bus jį nugriauti naudojant DDOS ataką, o tai apsunkintų puolėjo nugriautą puslapį. .

      Sveikinimai.

  6.   3000 sakė

    Gerai. Kol kas savo svetainėje tęsiu „NGINX“, kad nekankinčiau turimo VPS.

  7.   Bruno cascio sakė

    Geras įrašas @Drassill!

    Norėjau prisidėti prie ko nors galbūt labiau statistinio nei konfigūravimo.
    Nors lengviausias ir greičiausias būdas apskaičiuoti vartojimo parametrą yra vidurkis, galbūt mes galėtume būti griežtesni ir vietoje „vidurkio“ naudoti „mediana“. Nuo ko tai mus išgelbėtų? Kad skaičiai kiltų tuo atveju, jei ryšys sunaudotų daug atminties. Pvz., Tarkime, kad šie klientai naudoja šias reikšmes norimame atminties vienete (KB, MB, MiB ir kt.):

    10, 15, 150, 5, 7, 10, 11, 12

    Vidutinis gautų maždaug ~ 30

    Taip yra todėl, kad turime labai didelį kraštutinumą (150) ir kad skaičiavimai yra beprotiški. Mediana susideda iš šių duomenų užsakymo, mėginių skaičiaus padalijimo iš 2 (mūsų centro) ir tada tos pozicijos skaičiaus gavimo. Tai turėtume kažką panašaus

    5, 7, 10, 10, 11, 12, 15, 150

    Taigi mūsų vidurkis būtų: 8/2 = 4, tai yra ~ 10

    Čia galite pamatyti, kad ir koks beprotiškas būtų kraštutinumas, jis visada suteiks mums tikroviškesnę vertę. Jei pridėsime klientą, kuris suvartoja 200, mūsų mediana bus 11, o vidurkis gali būti ...

    Tai tik indėlis ir labai diskutuotinas, nes su jungtimis jis nesisuka.

    Apkabink žmones linuxera 🙂

  8.   Carlos sakė

    Sveiki, turiu problemą savo dedikuotame serveryje ir tai yra tai, kad kiekvieną kartą, kai maždaug 250 žmonių prisijungia prie interneto, pagal „Google Analytics“ realiuoju laiku, mano serveris žlunga ir ryšys tampa lėtas, kol nutrūksta ryšys į svetainę ir niekada neįkelia daugiau nei šis vartotojų skaičius internete, bet kai matau dedikuoto serverio, kuris yra 8 GB RAM, našumą, jis rodo 10% naudojimo, procesorius: 5% naudojimo ir standusis diskas: 1.99% naudojimo.
    Ar gali man padėti? Nerandu ką daryti, ar atlikus šiuos veiksmus yra sprendimas?

    1.    Drassillas sakė

      Gerasis Karlosas.

      Jūsų aprašyta problema yra labai dažna, kai serveris nėra tinkamai paruoštas. Jūsų serveris tikriausiai priims daug mažesnį skaičių tuo pačiu metu veikiančių ryšių ir, pasiekęs 250 ryšių, jis suges. Laikydamiesi vadovo turėtumėte sugebėti išspręsti problemą, nors jei tame serveryje turite duomenų bazę, taip pat turėtumėte ją optimizuoti.

      Sveikinimai.

      1.    Carlos sakė

        Drassill, aš padariau jūsų paminėtą konfigūraciją ir ji buvo patenkinama, vakar aš pasiekiau 280 vartotojų internete ir serveris neužsibuvo, aš labai patenkinta šiuo rezultatu, taip pat noriu padaryti kitą dalyką, kurį man liepėte optimizuoti duomenų bazę, ¿Kaip tai pasiekti?

    2.    Drassillas sakė

      Duomenų bazės koncepcija yra gana atvira; „mysql“ naudojimas nėra tas pats, kas „postgres“ (pavyzdžiui). Akivaizdu, kad nežinau visų duomenų bazių; Išbandžiau „mysql“ ir „postgres“, o vienu metu vykstančių ryšių padidėjimas būtų pagrįstas parametro max ryšiais; „mysql“ optimizavimas būtų atliktas aplanke /etc/my.conf, o maks. jungčių parametras turėtų būti pakeistas (be kita ko). Vietoj „postgres“ savo tinklaraštyje yra straipsnis, kuriame paaiškinta, kaip jį optimizuoti, kuris gali būti naudingas jums arba kurį galite naudoti kaip nuorodą į savo duomenų bazę:

      http://bytelearning.blogspot.com.es/2016/02/postgresql-una-alternativa-mysql-en.html

      Sveikinimai.

  9.   Ericksonas Vasquezas sakė

    Sveiki, kai mesiu pirmą komandą, man rodoma vertė 0. Kas tai gali būti?

  10.   Danielis Ojeda sakė

    Ačiū už šį įrašą.

  11.   Rolando Aguilera Salazar sakė

    Koks geras vadovas, ši informacija yra dalis to, ko ieškau... ačiū!

    Bet dabar, jei noriu, kad viršijus 250 lankytojų skaičių, 251 lankytojas eitų į laukiantį puslapį arba virtualią eilę, ar galiu tai padaryti iš tos pačios konfigūracijos?

    Sveikinimai ir ačiū!