Si të rritni lidhjet e njëkohshme në Apache

Sot vij të flas edhe një herë me ju për një nga shërbimet më të përdorura në botë: Web serverin Apache2.

Shtë një temë për të cilën është folur shumë herë, por tani vij të të tregoj për një veçori tjetër që duhet marrë parasysh me këtë shërbim: Kufiri i lidhjeve të njëkohshme. Nuk ka rëndësi nëse kemi një anije kozmike shumë elementare ose me një procesor i7 dhe 32 GB ram ...

Kufiri i lidhjeve të njëkohshme do të jetë gjithmonë i njëjtë nëse nuk marrim masat e duhura, që do të thotë se nëse duam të kemi shumë njerëz të lidhur në të njëjtën kohë, jo vetëm që do të kërkojmë pajisje të mira, por edhe një konfigurim të mirë.

Në këtë rast nuk është e nevojshme të instaloni asgjë, gjithçka bazohet në koncepte të thjeshta që duhet të merren parasysh për të konfiguruar apache; koncepte që duhet të jenë shumë të qarta përpara se të dëshironi të bëni ndonjë ndryshim.

apache2_logo

Gjëja e parë për të menduar është: Çfarë kapaciteti ka ekipi im? Sa lidhje të njëkohshme mund të mbështesin pajisjet e mia nëse e detyroj atë sa më shumë që të jetë e mundur? E gjithë kjo varet nga një faktor i vetëm; RAM (Kujtesë e Hyrjes së Rastit).

Sa më i madh RAM-i, aq më i madh është numri i lidhjeve, megjithëse nuk ka ndonjë vlerë fikse (domethënë, klientë X për secilin X ram), kjo është arsyeja pse para së gjithash është e rëndësishme të bëni disa llogaritje të vogla në serverin tonë të internetit, në mënyrë që të dimë kufijtë tanë.

Gjëja e parë që duhet të dini është se sa memorie RAM konsumon mesatarisht çdo lidhje me Apache, pasi çdo lidhje e vendosur supozon një konsum të caktuar RAM në sistem ... Padyshim që jo të gjitha lidhjet konsumojnë të njëjtin dash, me të cilin do të duhej të bëni një media ... E gjithë kjo mund të merret me komandën e mëposhtme:

ps -ylC apache2 - renditja: rss | awk '{SUM + = 8 $; I + = 1} END {print SUM / I / 1024} '

Rezultati i marrë do të përfaqësohej në megabajt dhe mund të ndryshojë në varësi të numrit të lidhjeve aktive, llojit të faqeve të aksesuara, etj ... Prandaj, këshillohet që të kryeni provën me skeda të ndryshme të hapura; secili prej tyre duke treguar përmbajtje të ndryshme nëse është e mundur. Në rastin tim, për shembull, rezultati ka qenë 9.5458, që nëse do ta rrumbullakosnim lart do të ishte 10 MB RAM i konsumuar mesatarisht për lidhje.

Alsoshtë gjithashtu e rëndësishme të dini se sa RAM konsumohet nga pjesa tjetër e proceseve që janë aktive në sistem, pasi që shërbimi në internet nuk është i vetmi që funksionon në sistemin operativ dhe është e nevojshme të lini memorie RAM falas në server në mënyrë që të mund të ekzekutojë pjesën tjetër të detyrave. Kjo mund të merret me komandën e treguar më poshtë:

ps -N -ylC apache2 - renditja: rss | awk '{SUM + = $ 8} END {shtyp SUM / 1024}'

Rezultati i marrë do të përfaqësohej gjithashtu në megabajt dhe do të na tregonte mjaft saktësisht sasinë e RAM-it të konsumuar nga pjesa tjetër e proceseve; në rastin tim 800 MB. Me këtë informacion mund të bëjmë një llogaritje të përgjithshme të numrit të lidhjeve të njëkohshme që mund të kemi; Llogarit që do të merrnim përmes një operacioni shumë të thjeshtë.

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

Me këtë formulë në dorë, le të imagjinojmë se kemi një kompjuter me 4 GB RAM, pra 4096 MB dhe se kompjuteri ynë ka treguar rezultatet e lartpërmendura; llogaritja do të ishte:

(4096 - 800) / 10 = 329 lidhje të njëkohshme

Problemi me këtë llogaritje është se njëra është tepër ekstreme, pasi do të konsumonte të gjithë RAM-in (duke e bërë serverin të konsumojë swap) dhe gjithashtu, në rast se ka një bazë të dhënash, të tilla si MySQL ose ndonjë tjetër, lidhjet me të do të konsumonin gjithashtu RAM, kështu që numri i marrë mund të kualifikohet si një numër utopik. Prandaj, në mënyrë që të lirojmë kujtesën për procese të mundshme shtesë dhe gjithashtu të shqyrtojmë mundësinë që lidhjet me një bazë të dhënash të ekzekutohen, ne do të zvogëlonim numrin e lidhjeve me 250.

Tani që kemi numrin tonë maksimal të lidhjeve të njëkohshme, duhet të përgatisim Apache për të qenë në gjendje të marrim këtë numër, gjë që bëhet në skedarin e konfigurimit të kësaj thirrjeje apache2.conf, e cila është pritur në / etj / apache2.

Dosja në fjalë ndjek një strukturë të bazuar në module, secili me emrin e tij përkatës, por ne do të interesoheshim vetëm për njërën prej tyre, emri i të cilit është  mpm_prefork_modul. Moduli në fjalë ka të dhëna vijuese si parazgjedhje:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0

Ky modul ka një seri parametrash shumë të rëndësishëm, megjithëse ekziston një prej tyre që do të na interesonte veçanërisht, i quajtur Klientët Max. Ky parametër specifikon numrin maksimal të lidhjeve të njëkohshme dhe duhet të modifikohet në 250.

Një detaj për tu marrë në konsideratë është se kur një vlerë tjetër nga ajo e paracaktuar specifikohet në parametrin në fjalë, është e nevojshme të shtoni një tjetër më shumë PARA këtij. Ky parametër quhet Kufiri i Serverit dhe përcakton kufirin e lidhjeve që serveri mund të "mbajë" edhe kur është jashtë kufirit.

Parametri ServerLimit gjithmonë duhet të jetë pak më i lartë se MaxClients dhe këtu, pasi ka pak hapësirë ​​për manovrim, një kufi prej 270. Kjo do ta bënte modulin të dukej kështu:

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

Tani do të ishte e nevojshme vetëm të rindizni shërbimin Apache duke përdorur komandën: 

/etc/init.d/apache2 rinisni

Me këtë ne tashmë mund të shijojmë serverin tonë të optimizuar.

Përshëndetje.


22 komente, lini tuajën

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   zetatinë dijo

    Faleminderit për postimin!

    1.    drassill dijo

      Unë jam i lumtur që ju duket e dobishme.

      Përshëndetje.

  2.   Miguel Angel dijo

    Ekziston një mënyrë për të grumbulluar Apache dhe dy servera, a mund të shpjegoni se si funksionon?

    1.    drassill dijo

      Edhe pse kam lexuar disa teori në lidhje me të, unë kurrë nuk e kam zbatuar atë në praktikë. Akoma, mbase ky artikull mund t'ju japë disa udhëzime në lidhje me këtë, megjithëse e përsëris se nuk kam pasur mundësi ta zbatoj në praktikë:

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

    2.    Eduardo Xhalil dijo

      Ju keni kërkuar për një kohë të gjatë, nëse nuk e keni zgjidhur; Unë kam një skemë balancimi me një palë të tretë që vepron si një sistem skedari, ju i drejtoni dosjet që janë në var / www / html / (në rastin tim) në sistemin e skedarëve, kështu që ata ndajnë të njëjtin informacion, dhe ndoshta ju do të kërkojnë një ip virtual që përgjigjet dhe ridrejtohet në ip-et e apache-ve, për këtë mund të pushtoni një haproksi dhe nëse e dëshironi në një disponueshmëri të lartë mund të integroheni Keepalive në rast se njëra bie, tjetra vazhdon të përgjigjet, ose gjithashtu nëse tashmë keni një domen për aplikacionin, ju mund të ekuilibroni me pound duke bërë backends në të dy serverat, për raste specifike të tilla si moodle ose aplikacione të caktuara që lidhen me një bazë të dhënash në mysql, do të duhet të krijoni një përdorues për server aplikacioni që tregon të njëjtën bazë të të dhënave .

  3.   shamaru dijo

    Faleminderit shumë për postimin, keni absolutisht të drejtë, dashi është llogaritja primare, megjithëse imagjinoj që ne gjithashtu llogarisim numrin maksimal të proceseve që procesori ynë mund të trajtojë (natyrisht, së pari duke bërë llogaritjen e kujtesës kryesore) dhe si disku do të shpërndahej fort (Shembull ndarëse / var = 1TR).

    1.    drassill dijo

      Ke te drejte; gjithçka është e rëndësishme, si kontrolli i temperaturës ndër të tjera. Padyshim që një procesor i fuqishëm mund të ekzekutojë një numër më të madh detyrash njëkohësisht me një efikasitet të madh, por qëllimi i këtij postimi ishte të shpjegonte rëndësinë e RAM-it në lidhje me numrin e lidhjeve të njëkohshme.

      Një mënyrë e mirë për të kontrolluar të gjithë këta faktorë dhe për të parë nëse procesori ynë nuk është i ngopur ose nëse kemi pak RAM të lirë, do të ishte duke përdorur një skenar bash. Ndoshta është interesant për ju ky postim që bëra disa ditë më parë në lidhje me të, të cilin ju lë në lidhjen vijuese; Shtë një monitorim global por mund të jetë interesant për dikë:

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

      të fala

  4.   Sergio S. dijo

    Shënim shumë i mirë, shumë faleminderit!

    1.    drassill dijo

      Faleminderit shumë! Shpresoj të keni qenë në gjendje ta shfrytëzoni atë.

  5.   gaztor dijo

    Nuk dua të jem hile ...
    … Por duke rritur numrin e lidhjeve nuk i lini më të prekshëm ndaj një sulmi DDoS?

    1.    drassill dijo

      Nuk është pyetje e qetë e kretinës. E vërteta është se duke rritur numrin e lidhjeve të njëkohshme, ne pjesërisht fortifikojmë Apache kundër sulmeve DDOS, pasi duhet të merrni parasysh se numri i lidhjeve maksimale të njëkohshme të vendosura në server është numri i lidhjeve maksimale totale, jo ato që vijnë nga një përdorues i vetëm. Kështu, ndërsa në fillim mund të mbështesnim vetëm 150 lidhje të njëkohshme (qofshin ato lidhje nga një burim i ligjshëm apo jo) tani mund të mbështetemi në aq sa mbështet serveri ynë, duke kërkuar një numër më të madh të lidhjeve në të njëjtën kohë për të qenë pa shërbimi Natyrisht, rritja e numrit maksimal të lidhjeve nuk është një mënyrë për tu mbrojtur nga ky lloj sulmi, por përkundrazi do të duhej të zbatoheshin politikat e firewall-it. Nëse, për shembull, shërbimi në internet që dëshironi të vendosni do të ekspozohet në internet, një masë sigurie që mund të zbatohet do të ishte shtimi i këtyre linjave në murin tonë të zjarrit:

      iptables -A INPUT -p tcp –syn –dport 80 -m konlimit –connlimit-deri në 10 -m gjendje –shteti i ri -j PRANIMI

      iptables -A INPUT -p tcp –dport 80 -m shtet - shtet i themeluar, i lidhur - j PRANIMI

      iptables -A HYRJE -p tcp –dport 80 -j DROP

      1.    Gaztor dijo

        Një nga karakteristikat e sulmeve DDoS është se një sulmues mund të duket se dërgon pako nga disa drejtime të ndryshme, gjë që parandalon rrjedhën e paketave të vijë vetëm nga një drejtim.

    2.    drassill dijo

      Keni të drejtë në kuptimin që një firewall si ai që unë kam ngritur nuk është shumë efikas ndaj një sulmi DDOS, pasi vjen nga burime të ndryshme. Akoma, është më mirë të kufizosh numrin e lidhjeve në 10 për secilin prej këtyre burimeve sesa të mos kesh një limit, në mënyrë që secili burim të mund të krijojë njëqind ose më shumë lidhje.

      Në çdo rast, kompleti i pyetjes është që sa më shumë lidhje të njëkohshme që serveri të mbështesë, aq më e vështirë do të jetë rrëzimi i tij me një sulm DDOS, gjë që do ta bënte më të vështirë rrëzimin e faqes nga një sulmues .

      Përshëndetje.

  6.   eliotime3000 dijo

    Mirë Tani për tani unë vazhdoj me NGINX në faqen time në mënyrë që të mos torturoj VPS që kam.

  7.   Bruno cascio dijo

    Postim i mbare @Drassill!

    Doja të kontribuoja me diçka mbase më statistikore sesa konfigurimi.
    Megjithëse mënyra më e lehtë dhe e shpejtë për të llogaritur parametrin e konsumit është me mesataren, mbase ne mund të jemi më rigorozë dhe të përdorim "mesoren" në vend të "mesatares". Çfarë do të na shpëtonte? Që numrat të rriten në rast se një lidhje ka konsumuar shumë memorje. Për shembull, supozoni se klientët e mëposhtëm që konsumojnë vlerat e mëposhtme, në njësinë e kujtesës që ata duan (KB, MB, MiB, etj):

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

    Mesatarja do të jepte afërsisht 30

    Dhe kjo sepse kemi një fund shumë të madh (150), dhe llogaritjet janë të çmendura. Mesatarja konsiston në renditjen e këtyre të dhënave, ndarjen e numrit të mostrave me 2 (qendra jonë) dhe pastaj marrjen e numrit të asaj pozicioni. Me këtë do të kishim diçka të ngjashme

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

    Pra mesatarja jonë do të ishte: 8/2 = 4 që është 10

    Këtu mund të shihni se sado i çmendur të jetë ekstremi, ai gjithmonë do të na japë një vlerë më realiste. Nëse shtojmë një klient që konsumon 200, mesatarja jonë do të jetë 11, ndërsa mesatarja mund të shkojë në.

    Isshtë vetëm një kontribut, dhe është shumë i diskutueshëm, sepse me lidhjet nuk është i dehur.

    Përqafoni njerëzit linuxera

  8.   Carlos dijo

    Përshëndetje, unë kam pasur një problem në serverin tim të dedikuar, dhe është që sa herë që afrohet afërsisht 250 persona në internet, sipas google analytics në kohë reale, serveri im sikur shembet dhe lidhja bëhet e ngadaltë derisa të bie lidhja në faqen e internetit dhe kurrë nuk ngarkon më shumë se ai numër i përdoruesve në internet, por kur shoh performancën e serverit të dedikuar që është 8 GB RAM ajo tregon 10% të përdorimit, CPU: 5% të përdorimit dhe diskun e ngurtë në: 1.99% të përdorimit.
    A mund te me ndihmosh? Nuk mund të gjej çfarë të bëj, a është zgjidhja bërja e këtyre hapave?

    1.    drassill dijo

      Karlos i mire.

      Problemi që përshkruani është shumë i zakonshëm kur serveri nuk është i përgatitur siç duhet. Serveri juaj ndoshta do të pranojë një numër shumë më të vogël të lidhjeve të njëkohshme dhe kur të arrijë 250 lidhje do të prishet. Duke ndjekur manualin, duhet të jeni në gjendje të zgjidhni problemin, megjithëse nëse keni një bazë të dhënash në atë server do të duhet të optimizoni atë bazë të të dhënave.

      Përshëndetje.

      1.    Carlos dijo

        Drassill, unë kam bërë konfigurimin që përmendët dhe ka qenë i kënaqshëm, dje arrita 280 përdorues në internet dhe serveri nuk u var, unë jam shumë i kënaqur me këtë rezultat, dhe unë gjithashtu dua të bëj gjënë tjetër që më thoni të optimizoj baza e të dhënave, ¿Si mund ta arrij këtë?

    2.    drassill dijo

      Koncepti i bazës së të dhënave është mjaft i hapur; përdorimi i mysql nuk është i njëjtë me postgres (për shembull). Padyshim që nuk i di të gjitha bazat e të dhënave; Unë kam provuar mysql dhe postgres, dhe rritja e lidhjeve të njëkohshme në këto do të bazohej në parametrat lidhje max; optimizimi i mysql do të bëhej në /etc/my.conf dhe lidhja maksimale e parametrit do të duhej të ndryshohej (ndër të tjera). Për postgres në vend të kësaj, unë kam një artikull në blogun tim që shpjegon se si ta zgjedh atë që mund të jetë i dobishëm për ju ose që mund ta përdorni si referencë për bazën tuaj të të dhënave:

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

      Përshëndetje.

  9.   Erickson vasquez dijo

    Përshëndetje, kur hedh komandën e parë, ajo më tregon vlerën 0. Çfarë mund të jetë?

  10.   Daniel Ojeda dijo

    Faleminderit për këtë postim.

  11.   Rolando Aguilera Salazar dijo

    Çfarë manuali i mirë, ky informacion është pjesë e asaj që unë po kërkoj... faleminderit!

    Por tani, nëse dua që kur të tejkalohen ata 250 vizitorë, vizitori 251 të shkojë në një faqe pritjeje ose në radhë virtuale, a mund ta bëj këtë nga i njëjti konfigurim?

    Pershendetje dhe faleminderit!