Ako zvýšiť počet súčasných pripojení v Apache

Dnes si s vami prídem ešte raz pohovoriť o jednej z najpoužívanejších webových služieb na svete: o webovom serveri Apache2.

Je to téma, o ktorej sa hovorilo už mnohokrát, ale teraz vám poviem o ďalšej funkcii, ktorú je potrebné zohľadniť pri tejto službe: Limit súčasných pripojení. Nezáleží na tom, či máme veľmi základnú alebo vesmírnu loď s procesorom i7 a 32 GB RAM ...

Limit simultánnych pripojení bude vždy rovnaký, pokiaľ neprijmeme príslušné opatrenia, čo znamená, že ak chceme mať pripojených veľa ľudí súčasne, budeme vyžadovať nielen dobrý hardvér, ale aj dobrú konfiguráciu.

V takom prípade nie je potrebné nič inštalovať, všetko je založené na jednoduchých konceptoch, ktoré je potrebné zohľadniť pri konfigurácii apache; koncepty, ktoré musia byť veľmi jasné skôr, ako budú chcieť vykonať akékoľvek zmeny.

apache2_logo

Prvá vec, na ktorú treba myslieť, je: Akú kapacitu má môj tím? Koľko súčasných pripojení môže moje zariadenie podporovať, ak ho vynútim čo najviac? To všetko závisí od jedného faktora; RAM (pamäť s náhodným prístupom).

Čím väčšia je RAM, tým väčší je počet pripojení, aj keď neexistuje pevná hodnota (tj. X klientov pre každý X ram), preto je v prvom rade dôležité urobiť nejaké malé výpočty na našom webovom serveri, s aby sme poznali naše limity.

Prvá vec, ktorú by ste mali vedieť, je to, koľko RAM v priemere spotrebuje každé pripojenie k serveru Apache, pretože každé nadviazané pripojenie predpokladá určitú spotrebu RAM v systéme ... Je zrejmé, že nie všetky spojenia spotrebúvajú rovnakého operačného systému, s ktorým by sa musel človek spojiť médium ... To všetko je možné získať pomocou nasledujúceho príkazu:

ps -ylC apache2 --sort: rss | awk '{SUM + = 8 dolárov; I + = 1} KONIEC {print SUM / I / 1024} '

Získaný výsledok by bol vyjadrený v megabajtoch a môže sa líšiť v závislosti od počtu aktívnych pripojení, typu navštívených stránok atď ... Preto je vhodné vykonať test s otvorenými rôznymi záložkami; každý z nich má podľa možnosti odlišný obsah. Napríklad v mojom prípade bol výsledok 9.5458, čo by, ak by sme to zaokrúhli, bolo 10 MB RAM spotrebovaná v priemere na jedno pripojenie.

Je tiež dôležité vedieť, koľko pamäte RAM spotrebujú ostatné procesy aktívne v systéme, pretože webová služba nie je jediná, ktorá beží v operačnom systéme, a je preto potrebné ponechať voľnú pamäť RAM na serveri. aby mohla plniť zvyšné úlohy. To je možné získať pomocou nižšie uvedeného príkazu:

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

Získaný výsledok by bol tiež vyjadrený v megabajtoch a celkom presne by nám ukázal množstvo pamäte RAM spotrebovanej zvyškom procesov; v mojom prípade 800 MB. S touto informáciou by sme mohli urobiť všeobecný výpočet počtu súčasných pripojení, ktoré by sme mohli mať; Počítam, že by sme to dosiahli veľmi jednoduchou operáciou.

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

S týmto vzorcom v ruke si predstavme, že máme počítač so 4 GB RAM, teda 4096 MB a že náš počítač ukázal vyššie uvedené výsledky; výpočet by bol:

(4096 - 800) / 10 = 329 simultánnych pripojení

Problém tohto výpočtu spočíva v tom, že je príliš extrémny, pretože by spotreboval všetku pamäť RAM (čím by server spotreboval swap), a tiež v prípade, že by mal k dispozícii databázu, ako je MySQL alebo iná, by pripojenie k nej spotrebovalo tiež RAM, takže získané číslo mohlo byť kvalifikované ako utopické číslo. Preto, aby sme uvoľnili pamäť pre prípadné ďalšie procesy a tiež zvážili možnosť vykonania pripojení k databáze, znížili by sme počet pripojení k 250.

Teraz, keď máme maximálny počet súčasných pripojení, by sme museli pripraviť Apache na príjem tohto čísla, čo sa deje v konfiguračnom súbore tohto hovoru. apache2.conf, ktorý je hostený v / etc / apache2.

Predmetný súbor má štruktúru založenú na moduly, každý s príslušným menom, ale zaujímal by nás iba jeden z nich, ktorého meno je  mpm_prefork_module. Predmetný modul má predvolene nasledujúce údaje:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0

Tento modul má sériu veľmi dôležitých parametrov, aj keď existuje jeden z nich, ktorý by nás obzvlášť zaujímal, tzv Maxclients. Tento parameter určuje maximálny počet súčasných pripojení a mal by sa upraviť na 250.

Jeden detail, ktorý je potrebné vziať do úvahy, je, že keď je v uvedenom parametri zadaná iná ako predvolená hodnota, je potrebné pridať ďalšiu ešte pred PRED touto. Tento parameter sa volá ServerLimit a nastavuje limit pripojení, ktoré by server mohol „zadržať“, aj keď je mimo tohto limitu.

Parameter ServerLimit musí byť vždy o niečo vyšší ako MaxClients, a preto je tu malý manévrovací priestor, limit 270. Takto by modul vyzeral takto:

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

Teraz by bolo potrebné iba reštartovať službu Apache pomocou príkazu: 

/etc/init.d/apache2 reštartujte

Vďaka tomu sme si už mohli vychutnať náš optimalizovaný webový server.

Zdravím.


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   zetatín dijo

    Ďakujem za príspevok!

    1.    drassill dijo

      Som rád, že ste to považovali za užitočné.

      Zdravím.

  2.   Miguel Angel dijo

    Existuje spôsob, ako zoskupiť Apache a dva servery, môžete vysvetliť, ako to funguje?

    1.    drassill dijo

      Aj keď som o tom už čítal určitú teóriu, nikdy som ju neaplikoval do praxe. Aj napriek tomu vám tento článok možno poskytne určité usmernenie, aj keď opakujem, že som nemal možnosť ho uviesť do praxe:

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

    2.    Edward Khalil dijo

      Ak ste neriešili, dlho ste sa pýtali; Mám vyrovnávaciu schému s treťou stranou, ktorá funguje ako súborový systém, nasmerujete priečinky, ktoré sa nachádzajú v adresári var / www / html / (v mojom prípade) na súborový systém, takže zdieľajú rovnaké informácie, a pravdepodobne budete vyžadovať virtuálnu IP, ktorá reaguje a presmeruje na IPS apačov, môžete obsadiť haproxy a ak ju chcete mať vo vysokej dostupnosti, môžete integrovať keepalive pre prípad, že jeden spadne, druhý bude naďalej reagovať alebo tiež ak už máte doménu pre aplikáciu, môžete vyvážiť fungovanie backendu na oboch serveroch, v konkrétnych prípadoch, ako napríklad moodle alebo určité aplikácie, ktoré sa pripájajú k databáze v mysql, by ste museli vytvoriť používateľa na serveri aplikácie, ktorý smeruje na rovnakú databázu .

  3.   šamaru dijo

    Veľmi pekne ďakujem za príspevok, máte úplnú pravdu, primárny výpočet je baran, aj keď si predstavujem, že počítame aj maximálny počet procesov, ktoré náš procesor zvládne (samozrejme najskôr urobte výpočet hlavnej pamäte) a ako by bol disk distribuovaný natvrdo (Príklad oddielov / var = 1TR).

    1.    drassill dijo

      Máš pravdu; všetko je dôležité, okrem iného napríklad regulácia teploty. Je zrejmé, že výkonný procesor môže vykonávať veľké množstvo úloh súčasne s vysokou účinnosťou, ale cieľom tohto príspevku bolo vysvetliť dôležitosť RAM vzhľadom na počet súčasných pripojení.

      Dobrým spôsobom, ako riadiť všetky tieto faktory a zistiť, či náš procesor nie je nasýtený, alebo či máme málo voľnej pamäte RAM, by bolo pomocou bash skriptu. Možno je pre vás zaujímavý tento príspevok, ktorý som o ňom pred pár dňami zverejnil a ktorý vám nechávam v nasledujúcom odkaze; Jedná sa o globálny monitoring, ale pre niekoho môže byť zaujímavý:

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

      pozdravy

  4.   Sergio S. dijo

    Veľmi dobrá poznámka, ďakujem pekne!

    1.    drassill dijo

      Mnohokrat dakujem! Dúfam, že ste to dokázali využiť.

  5.   klaun dijo

    Nechcem byť hlupák ...
    … Ale zvýšením počtu pripojení nenecháte zraniteľnejších voči DDoS útoku?

    1.    drassill dijo

      Nie je to žiadna pokojná kreténska otázka. Pravdou je, že zvýšením počtu súčasných pripojení čiastočne posilňujeme Apache proti útokom DDOS, pretože musíte brať do úvahy, že počet maximálnych súčasných pripojení vytvorených na serveri je počtom celkových maximálnych pripojení, nie tých, ktoré pochádzajú z jeden užívateľ. Zatiaľ čo na začiatku sme teda mohli podporovať iba 150 súčasných pripojení (či už ide o pripojenia z legitímneho zdroja, alebo nie), teraz môžeme rátať s toľkým počtom, aký podporuje náš server, čo vyžaduje väčší počet súčasne pripojených pripojení. služba. Je zrejmé, že zvýšenie maximálneho počtu pripojení nie je spôsobom ochrany pred týmto typom útoku, ale skôr by bolo treba implementovať politiky brány firewall. Ak bude napríklad webová služba, ktorú chcete vložiť, vystavená internetu, bezpečnostným opatrením, ktoré by sa mohlo implementovať, by bolo pridanie týchto riadkov do našej brány firewall:

      iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-do 10-m stavu –štát NOVÝ -j PRIJAŤ

      iptables -A VSTUP -p tcp –dport 80 -m stav –stav STAVEBNÉ, SÚVISIACE -j AKCEPTOVAŤ

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

      1.    klaun dijo

        Jednou z charakteristík útokov DDoS je, že sa môže javiť, že útočník odosiela pakety z niekoľkých rôznych smerov, čo zabraňuje toku paketov prichádzať iba z jedného smeru.

    2.    drassill dijo

      Máte pravdu v tom zmysle, že firewall, ako je ten, ktorý som nastavil, nie je proti útoku DDOS veľmi efektívny, pretože pochádza z rôznych zdrojov. Stále je lepšie obmedziť počet pripojení na 10 pre každý z týchto zdrojov, ako nemať obmedzenie, aby každý zdroj mohol nadviazať sto spojení alebo viac.

      Súprava otázky v každom prípade spočíva v tom, že čím viac súčasných pripojení server podporuje, tým ťažšie bude poraziť ich útokom DDOS, čo by sťažilo zneškodnenie stránky útočníkom. .

      Zdravím.

  6.   eliotime3000 dijo

    Dobre. Zatiaľ pokračujem s NGINX na svojom webe, aby som nemučil VPS, ktoré mám.

  7.   Bruno cascio dijo

    Pekný príspevok @Drassill!

    Chcel som prispieť niečím možno štatistickejším ako konfigurácia.
    Aj keď najjednoduchší a najrýchlejší spôsob výpočtu parametra spotreby je priemer, možno by sme mohli byť dôslednejší a namiesto „priemeru“ použiť „medián“. Čo by nás zachránilo? Že čísla vystrelia v prípade, že spojenie spotrebovalo veľa pamäte. Predpokladajme napríklad nasledujúcich klientov, ktorí spotrebúvajú nasledujúce hodnoty v požadovanej jednotke pamäte (KB, MB, MiB atď.):

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

    Priemer by dal asi ~ 30

    A to preto, že máme veľmi veľký koniec (150) a výpočty sú šialené. Medián pozostáva z usporiadania týchto údajov, vydelenia počtu vzoriek 2 (náš stred) a následného získania počtu tejto pozície. S týmto by sme mali niečo ako

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

    Náš priemer by teda bol: 8/2 = 4, čo je ~ 10

    Tu vidíte, že bez ohľadu na to, aký extrémny môže byť extrém, vždy nám dá realistickejšiu hodnotu. Ak k tomu pripočítame zákazníka, ktorý spotrebuje 200, náš medián bude 11, zatiaľ čo priemer môže dosiahnuť …….

    Je to iba príspevok a je to veľmi diskutabilné, pretože pri pripojeniach to nie je zaskrutkované.

    Objímajte ľudí linuxera 🙂

  8.   Carlos dijo

    Dobrý deň, na mojom dedikovanom serveri som mal problém, a to zakaždým, keď sa online priblíži počet približne 250 ľudí, podľa analytiky Google v reálnom čase sa môj server zrútil a pripojenie sa spomalilo, až kým pripojenie nevypadlo. na web a nikdy nenahrá viac ako tento počet používateľov online, ale keď vidím výkon dedikovaného servera, ktorý je 8 GB RAM, ukazuje to 10% využitia, procesor: 5% použitia a pevný disk v: 1.99% použitia.
    Môžeš mi pomôcť? Nemôžem nájsť, čo mám robiť, robí tieto kroky riešenie?

    1.    drassill dijo

      Dobrý Carlos.

      Problém, ktorý popisujete, je veľmi častý, ak server nie je správne pripravený. Váš server pravdepodobne prijme oveľa menší počet súčasných pripojení a keď dosiahne 250 pripojení, zlyhá. Podľa tohto manuálu by ste mali byť schopní problém vyriešiť, ale ak máte na danom serveri databázu, musíte ju tiež optimalizovať.

      Zdravím.

      1.    Carlos dijo

        Drassill, urobil som konfiguráciu, ktorú ste spomenuli, a bola uspokojivá, včera som dosiahol 280 používateľov online a server sa nezastavil, som s týmto výsledkom veľmi spokojný a chcem urobiť aj ďalšiu vec, ktorú mi hovoríte, aby som optimalizoval ako to dosiahnem?

    2.    drassill dijo

      Koncept databázy je dosť otvorený; Nie je to rovnaké používať napríklad mysql ako postgres. Je zrejmé, že nepoznám všetky databázy; Vyskúšal som mysql a postgres a zvýšenie simultánnych pripojení v nich by bolo založené na parametri max connections; optimalizácia mysql by sa robila v /etc/my.conf a musel by sa (okrem iných) zmeniť parameter max connections. Namiesto toho mám pre postgres článok na svojom blogu, ktorý vysvetľuje, ako ho optimalizovať, čo by pre vás mohlo byť užitočné alebo ktoré môžete použiť ako referenciu pre svoju databázu:

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

      Zdravím.

  9.   Erickson vasquez dijo

    Dobrý deň, keď hodím prvý príkaz, zobrazí mi hodnotu 0. Čo to môže byť?

  10.   Daniel Ojeda dijo

    Ďakujem za tento príspevok.

  11.   Rolando Aguilera Salazar dijo

    Aký dobrý manuál, tieto informácie sú súčasťou toho, čo hľadám... vďaka!

    Ale teraz, ak chcem, aby pri prekročení týchto 250 návštevníkov prešlo 251 návštevníkov na čakajúcu stránku alebo virtuálny front, môžem to urobiť z rovnakej konfigurácie?

    Zdravím a ďakujem!