Paano madagdagan ang mga kasabay na koneksyon sa Apache

Ngayon ay napunta ako upang makausap ka ulit tungkol sa isa sa mga pinaka ginagamit na serbisyo sa web sa mundo: Ang web server Apache2.

Ito ay isang paksa na napag-usapan nang maraming beses, ngunit ngayon sasabihin ko sa iyo ang tungkol sa isa pang tampok na isasaalang-alang sa serbisyong ito: Ang limitasyon ng sabay na koneksyon. Hindi mahalaga kung mayroon kaming napaka-pangunahing o isang sasakyang pangalangaang na may isang i7 processor at 32 GB ng ram ...

Ang limitasyon ng sabay-sabay na mga koneksyon ay palaging magiging pareho maliban kung gumawa kami ng mga naaangkop na hakbang, na nangangahulugang kung nais naming magkaroon ng maraming mga tao na nakakonekta nang sabay, hindi lamang namin kakailanganin ang mahusay na hardware, ngunit isang mahusay na pagsasaayos din.

Sa kasong ito, hindi kinakailangan na mag-install ng anuman, ang lahat ay batay sa simpleng mga konsepto na dapat isaalang-alang upang mai-configure ang apache; mga konsepto na dapat na maging napakalinaw bago nais na gumawa ng anumang mga pagbabago.

apache2_logo

Ang unang bagay na dapat isipin ay: Anong kapasidad ang mayroon ang aking koponan? Gaano karaming mga sabay na koneksyon ang maaaring suportahan ng aking kagamitan kung pipilitin ko ito hangga't maaari? Ang lahat ng ito ay nakasalalay sa isang solong kadahilanan; RAM (Random Access Memory).

Ang mas malaki ang RAM, mas malaki ang bilang ng mga koneksyon, kahit na walang naayos na halaga (iyon ay, X kliyente para sa bawat X ram), iyon ang dahilan kung bakit una sa lahat mahalaga na gumawa ng ilang maliliit na kalkulasyon sa aming web server, na may ang upang malaman ang aming mga limitasyon.

Ang unang bagay na dapat mong malaman ay kung magkano ang memorya ng RAM sa average na kumonsumo ng bawat koneksyon sa Apache, dahil ang bawat koneksyon na itinatag ay nagpapalagay ng isang tiyak na pagkonsumo ng RAM sa system ... Malinaw na hindi lahat ng mga koneksyon ay kumakain ng parehong ram, kung saan kailangan mong gumawa ng isang media ... Ang lahat ng ito ay maaaring makuha sa mga sumusunod na utos:

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

Ang resulta na nakuha ay kinakatawan sa megabytes at maaaring mag-iba depende sa bilang ng mga aktibong koneksyon, ang uri ng mga pahina na na-access, atbp ... Sa kadahilanang ito ipinapayong isagawa ang pagsubok na may iba't ibang mga tab na bukas; bawat isa sa kanila ay nagpapakita ng iba't ibang nilalaman kung maaari. Sa aking kaso, halimbawa, ang resulta ay 9.5458, na kung iikot namin ito hanggang sa itaas ay magiging 10 MB Ang natupok na RAM sa average bawat koneksyon.

Mahalaga rin na malaman kung magkano ang natupok na RAM ng natitirang mga proseso na aktibo sa system, dahil hindi lamang ang serbisyo sa web ang tumatakbo sa operating system at kinakailangan na mag-iwan ng libreng memorya ng RAM sa server upang maipatupad nito ang natitirang mga gawain. Maaari itong makuha sa pamamagitan ng ipinakitang utos sa ibaba:

ps -N -ylC apache2 - sort: rss | awk '{SUM + = $ 8} TAPOS {print SUM / 1024}'

Ang resulta na nakuha ay kinakatawan din sa mga megabytes, at ipapakita sa amin ng tiyak na ang halaga ng RAM na natupok ng natitirang mga proseso; sa aking kaso 800 MB. Sa impormasyong ito maaari kaming gumawa ng isang pangkalahatang pagkalkula ng bilang ng mga sabay na koneksyon na maaaring mayroon kami; Kinakalkula ko na makukuha namin sa pamamagitan ng isang napaka-simpleng operasyon.

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

Gamit ang formula na ito sa kamay, isipin natin na mayroon kaming isang computer na may 4 GB RAM, iyon ay 4096 MB at ipinakita ng aming computer ang nabanggit na mga resulta; ang pagkalkula ay:

(4096 - 800) / 10 = 329 sabay-sabay na mga koneksyon

Ang problema sa pagkalkula na ito ay ang isa ay masyadong matindi, dahil gugugulin nito ang lahat ng RAM (ginagawang ubusin ang server) at gayun din, sa kaso ng pagkakaroon ng isang database, tulad ng MySQL o anumang iba pa, ang mga koneksyon dito ay makakonsumo din Ang RAM, kung saan ang numero na nakuha ay maaaring maging kwalipikado bilang isang numero ng utopian. Samakatuwid, upang mapalaya ang memorya para sa mga posibleng karagdagang proseso at isaalang-alang din ang posibilidad na ang mga koneksyon sa isang database ay naisakatuparan, babawasan namin ang bilang ng mga koneksyon sa 250.

Ngayon na mayroon kaming maximum na bilang ng mga magkakasabay na koneksyon, ihahanda namin ang Apache upang matanggap ang numerong ito, na ginagawa sa file ng pagsasaayos ng tawag na ito apache2.conf, na naka-host sa / etc / apache2.

Ang pinag-uusapan na file ay sumusunod sa isang istraktura batay sa modules, bawat isa ay may kaukulang pangalan nito, ngunit magiging interesado lamang kami sa isa sa mga ito, na ang pangalan ay  mpm_prefork_module. Ang module na pinag-uusapan ay may sumusunod na data bilang default:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0

Ang modyul na ito ay may isang serye ng napakahalagang mga parameter, kahit na mayroong isa sa mga ito na partikular na interesado kami, tinawag Mga MaxClient. Tinutukoy ng parameter na ito ang maximum na bilang ng mga sabay na koneksyon at dapat na baguhin sa 250.

Ang isang detalye na dapat tandaan ay kapag ang isang halaga maliban sa default ay tinukoy sa nasabing parameter, kinakailangan upang magdagdag ng isa pa nang BAGO ang isang ito. Tinawag ang parameter na ito ServerLimit at itinatakda ang hangganan ng mga koneksyon na maaaring "hawakan" ng server kahit na nasa labas ng limitasyon.

Ang parameter ng ServerLimit ay palaging kailangang maging mas mataas nang bahagya kaysa sa MaxClients at dito, dahil may maliit na silid para sa pagmamaniobra, isang limitasyon ng 270. Gagawin nitong ganito ang modyul:

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

Ngayon ay kakailanganin lamang na i-restart ang serbisyo ng Apache gamit ang utos: 

/etc/init.d/apache2 restart

Sa pamamagitan nito ay nasisiyahan na kami sa aming na-optimize na web server.

Pagbati.


22 na puna, iwan mo na ang iyo

Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   zetatin dijo

    Salamat sa post!

    1.    drassill dijo

      Natutuwa akong nahanap mong kapaki-pakinabang ito.

      Pagbati.

  2.   Miguel Angel dijo

    Mayroong isang paraan upang kumpol sa Apache at dalawang mga server, maaari mo bang ipaliwanag kung paano ito gumagana?

    1.    drassill dijo

      Kahit na nabasa ko ang ilang teorya tungkol dito, hindi ko kailanman inilalapat ito sa pagsasanay. Kahit na, marahil ang artikulong ito ay maaaring magbigay sa iyo ng ilang patnubay sa bagay na ito, kahit na inuulit ko na hindi ako nagkaroon ng pagkakataong maisagawa ito:

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

    2.    Edward Khalil dijo

      humiling ka ng ilang sandali, kung hindi mo nalutas; Mayroon akong isang scheme ng pagbabalanse sa isang third party na kumikilos bilang isang file system, ituro mo ang mga folder na nasa var / www / html / (sa aking kaso) sa file system, kaya't nagbabahagi sila ng parehong impormasyon, at posibleng ikaw ay nangangailangan ng isang virtual ip na tumutugon at mag-redirect sa mga ip ng mga pag-apache, para dito maaari kang maghawak ng isang haproxy at kung nais mo ito sa mataas na kakayahang magamit maaari mong isama ang keepalive kung sakaling bumagsak ang isa, patuloy na tumutugon ang isa, o kung mayroon ka nang isang domain para sa application, maaari mong balansehin ang pound sa paggawa ng mga backend sa parehong mga server, para sa mga tukoy na kaso tulad ng moodle o ilang mga application na kumonekta sa isang database sa MySQL, magkakaroon ka upang lumikha ng isang gumagamit bawat server ng app na tumuturo sa parehong database .

  3.   shamaru dijo

    Maraming salamat sa post, tama ang iyong tama, ang tupa ay ang pangunahing pagkalkula, kahit na naiisip ko na kinakalkula din namin ang maximum na bilang ng mga proseso na maaaring hawakan ng aming processor (syempre, unang ginagawa ang pagkalkula ng pangunahing memorya) at kung paano maipamahagi nang husto ang disk (Halimbawa ng mga pagkahati / var = 1TR).

    1.    drassill dijo

      Tama ka; ang lahat ay mahalaga, tulad ng pagpigil sa temperatura bukod sa iba pang mga bagay. Malinaw na ang isang malakas na processor ay maaaring gumanap ng mas maraming bilang ng mga gawain nang sabay-sabay na may mahusay na kahusayan, ngunit ang layunin ng post na ito ay upang ipaliwanag ang kahalagahan ng RAM patungkol sa bilang ng mga sabay na koneksyon.

      Ang isang mahusay na paraan upang makontrol ang lahat ng mga kadahilanang ito at makita kung ang aming processor ay hindi puspos o kung mayroon kaming maliit na libreng RAM, ay sa pamamagitan ng paggamit ng isang bash script. Marahil ang post na ito na ginawa ko ilang araw na ang nakakaraan tungkol dito ay kawili-wili para sa iyo, na iniiwan ko sa sumusunod na link; Ito ay isang pandaigdigang pagsubaybay ngunit maaaring maging kawili-wili para sa isa:

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

      Regards

  4.   Sergio S. dijo

    Napakagandang tala, maraming salamat!

    1.    drassill dijo

      Maraming salamat! Sana nagawa mong samantalahin ito.

  5.   payaso dijo

    Ayokong maging isang maloko ...
    ... Ngunit sa pamamagitan ng pagdaragdag ng bilang ng mga koneksyon ay hindi mo iniiwan ang mas mahina laban sa isang pag-atake ng DDoS?

    1.    drassill dijo

      Hindi ito tahimik na tanong sa cretin. Ang totoo ay sa pamamagitan ng pagdaragdag ng bilang ng mga sabay na koneksyon, bahagyang pinatibay namin ang Apache laban sa mga pag-atake ng DDOS, dahil dapat mong tandaan na ang bilang ng maximum na sabay-sabay na mga koneksyon na itinatag sa server ay ang bilang ng kabuuang mga maximum na koneksyon, hindi sa mga nagmumula sa isang solong gumagamit. Kaya, habang sa simula ay suportahan lamang namin ang 150 sabay-sabay na mga koneksyon (kung ang mga ito ay koneksyon mula sa isang lehitimong mapagkukunan o hindi) ngayon maaari naming umasa sa maraming mga sinusuportahan ng aming server, na nangangailangan ng isang mas maraming bilang ng mga koneksyon sa parehong oras na naiwan nang walang serbisyo. Malinaw na, ang pagdaragdag ng maximum na bilang ng mga koneksyon ay hindi isang paraan upang maprotektahan ang iyong sarili mula sa ganitong uri ng pag-atake, ngunit sa halip ay dapat ipatupad ang mga patakaran sa firewall. Kung, halimbawa, ang serbisyo sa web na nais mong ilagay ay mailantad sa internet, isang hakbang sa seguridad na maaaring ipatupad ay ang pagdaragdag ng mga linyang ito sa aming firewall:

      iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-upto 10 -m state –state BAGONG -j ACCEPT

      iptables -A INPUT -p tcp –dport 80 -m state –state Naitaguyod, KAUGNAYAN -j TANGGAPIN

      iptables -A INPUT -p tcp -dport 80 -j DROP

      1.    payaso dijo

        Ang isa sa mga katangian ng pag-atake ng DDoS ay ang isang magsasalakay ay maaaring lumitaw upang magpadala ng mga packet mula sa maraming magkakaibang direksyon, na pumipigil sa daloy ng mga packet na nagmumula lamang sa isang direksyon.

    2.    drassill dijo

      Tama ka sa diwa na ang isang firewall tulad ng na-set up ko ay hindi masyadong mahusay laban sa isang pag-atake ng DDOS, dahil nagmula ito sa iba't ibang mga mapagkukunan. Gayunpaman, mas mahusay na limitahan ang bilang ng mga koneksyon sa 10 para sa bawat isa sa mga mapagkukunan na ito kaysa sa walang pagkakaroon ng isang limitasyon, upang ang bawat mapagkukunan ay maaaring magtatag ng isang daang mga koneksyon o higit pa.

      Sa anumang kaso, ang kit ng tanong ay ang mas maraming mga sabay na koneksyon na sinusuportahan ng server, mas mahirap itong ibagsak ito sa isang pag-atake ng DDOS, na kung saan ay magiging mas mahirap para sa pahina na matumba ng isang umaatake .

      Pagbati.

  6.   eliotime3000 dijo

    Mabuti Sa ngayon ay nagpatuloy ako sa NGINX sa aking site upang hindi pahirapan ang VPS na mayroon ako.

  7.   Bruno cascio dijo

    Magandang post @Drassill!

    Nais kong magbigay ng isang bagay marahil na mas pang-istatistika kaysa sa pagsasaayos.
    Bagaman ang pinakamadali at pinakamabilis na paraan upang makalkula ang parameter ng pagkonsumo ay may mean, marahil maaari kaming maging mas mahigpit at gamitin ang "median" sa halip na "mean". Ano ang ililigtas nito sa atin? Na ang mga numero ay nawala kung sakaling ang isang koneksyon ay natupok ng maraming memorya. Halimbawa, ipagpalagay na ang mga sumusunod na kliyente na kumakain ng mga sumusunod na halaga, sa yunit na nais nila ng memorya (KB, MB, MiB, atbp):

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

    Ang average ay magbibigay ng tinatayang ~ 30

    At ito dahil mayroon kaming isang napakalaking matinding (150), at ang mga kalkulasyon ay nakababaliw. Ang panggitna ay binubuo ng pag-order ng data na ito, na pinaghahati ang bilang ng mga sample ng 2 (aming sentro) at pagkatapos ay makuha ang bilang ng posisyon na iyon. Sa pamamagitan nito magkakaroon tayo ng tulad

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

    Kaya't ang aming ibig sabihin ay: 8/2 = 4 iyon ay ~ 10

    Dito mo makikita na kahit gaano kalokohan ang ulo nito, palagi kaming bibigyan ng isang mas makatotohanang halaga. Kung magdagdag kami ng isang customer na kumonsumo ng 200, ang aming panggitna ay 11, habang ang average ay maaaring mapunta sa ......

    Ito ay isang kontribusyon lamang, at napaka-debate, sapagkat sa mga koneksyon ay hindi ito naiipit.

    Yakapin ang mga tao linuxera 🙂

  8.   Carlos dijo

    Kumusta, nagkaroon ako ng problema sa aking nakalaang server, at iyon ay tuwing ang bilang ng humigit-kumulang na 250 katao sa online na lumalapit, ayon sa google analytics sa real time, ang aking server ay tulad nito na gumuho at ang koneksyon ay naging mabagal hanggang sa mahulog nito ang koneksyon sa website at hindi kailanman nag-a-upload ng higit sa bilang ng mga gumagamit na online, ngunit kapag nakita ko ang pagganap ng nakalaang server na 8gb ram nagpapakita ito ng 10% ng paggamit, ang cpu: 5% ng paggamit at ang hard disk sa: 1.99% ginagamit.
    Maaari mo ba akong tulungan? Hindi ko makita kung ano ang gagawin, solusyon ba ang paggawa ng mga hakbang na ito?

    1.    drassill dijo

      Mabuti Carlos.

      Ang problemang inilalarawan mo ay napaka-pangkaraniwan kapag ang server ay hindi handa nang maayos. Marahil ay tatanggap ang iyong server ng isang mas maliit na bilang ng mga sabay na koneksyon at kapag umabot ito sa 250 mga koneksyon ay mag-crash ito. Kasunod sa manu-manong dapat mong malutas ang problema, kahit na kung mayroon kang isang database sa server na iyon ay gusto mo ring i-optimize ang database na iyon.

      Pagbati.

      1.    Carlos dijo

        Drassill, nagawa ko na ang pagsasaayos na nabanggit mo at naging kasiya-siya ito, kahapon naabot ko ang 280 mga gumagamit online at hindi nag-crash ang server, masayang-masaya ako sa resulta na ito, at nais ko ring gawin ang iba pang bagay na sinabi mo sa akin na i-optimize ang database, ¿Paano ko makakamit ito?

    2.    drassill dijo

      Ang konsepto ng database ay medyo bukas; Ang paggamit ng MySQL ay hindi pareho sa mga postgres (halimbawa). Malinaw na hindi ko alam ang lahat ng mga database; Sinubukan ko ang MySQL at postgres, at ang pagtaas ng mga sabay na koneksyon sa mga ito ay batay sa mga parameter na koneksyon sa max; Ang pag-optimize ng mysql ay gagawin sa /etc/my.conf at ang parameter ng max na koneksyon ay kailangang mabago (bukod sa iba pa). Para sa mga postgres sa halip, mayroon akong isang artikulo sa aking blog na nagpapaliwanag kung paano i-optimize ito na maaaring maging kapaki-pakinabang sa iyo o na maaari mong gamitin bilang isang sanggunian para sa iyong database:

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

      Pagbati.

  9.   Erickson vasquez dijo

    Kumusta, kapag itinapon ko ang unang utos, ipinapakita sa akin ang halagang 0. Ano ito?

  10.   Daniel Ojeda dijo

    Salamat sa post na ito.

  11.   Rolando Aguilera Salazar dijo

    Napakagandang manual, ang impormasyong iyon ay bahagi ng hinahanap ko... salamat!

    Ngunit ngayon, kung gusto ko na kapag nalampasan ang 250 bisitang iyon, ang bisita 251 ay pupunta sa isang waiting page o virtual queue, magagawa ko ba ito mula sa parehong configuration?

    Pagbati at salamat!