Wéi erhéije gläichzäiteg Verbindungen an Apache

Haut kommen ech nach eng Kéier mat Iech iwwer ee vun de meescht benotzte Webservicer op der Welt ze schwätzen: De Webserver Apache2.

Et ass en Thema dat vill iwwer geschwat gouf, awer elo kommen ech Iech iwwer eng aner Feature ze berécksiichtege mat dësem Service: D'Limit vu gläichzäiteg Verbindungen. Et ass egal ob mir ganz Basis oder e Raumschëff mat engem i7 Prozessor an 32 GB Ram hunn ...

D'Limit vu gläichzäiteg Verbindunge wäert ëmmer déiselwecht sinn, ausser mir huelen déi entspriechend Moossnamen, dat heescht datt wa mir vill Leit zur selwechter Zäit verbonne wëllen hunn, brauche mir net nëmme gutt Hardware, awer och eng gutt Konfiguratioun.

An dësem Fall ass et net néideg eppes ze installéieren, alles baséiert op einfache Konzepter déi musse berécksiichtegt ginn fir Apache ze konfiguréieren; Konzepter déi ganz kloer musse sinn ier Dir Ännerunge maache wëllt.

apache2_logo

Déi éischt Saach fir nozedenken ass: Wéi eng Kapazitéit huet mäi Team? Wéi vill simultan Verbindungen kann meng Ausrüstung ënnerstëtzen wann ech et sou vill wéi méiglech forcéieren? All dat hänkt vun engem eenzege Faktor of; RAM (Random Access Memory).

Wat de RAM méi grouss ass, wat d'Zuel u Verbindunge méi grouss ass, och wann et kee feste Wäert gëtt (dat ass, X Cliente fir all X Ram), dofir ass et fir d'aller éischt wichteg e puer kleng Berechnungen op eisem Webserver ze maachen, mat den fir eis Grenzen ze kennen.

Dat éischt wat Dir sollt wëssen ass wéi vill RAM am Duerchschnëtt all Verbindung mat Apache verbraucht, well all etabléiert Verbindung e gewësse Konsum vu RAM am System ugeet ... Natierlech net all Verbindunge verbrauchen dee selwechte Ram, mat deem ee misst maachen e Medien ... All dëst ka mat folgendem Kommando kritt ginn:

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

D'Resultat kritt a Megabyte vertrueden a ka variéieren ofhängeg vun der Unzuel vun den aktive Verbindungen, der Aart vu Säiten, op deenen Dir zougitt, asw ... Dofir ass et unzeroden den Test mat verschiddenen Tabs op ze maachen; jidderee vun hinnen weist wa méiglech verschidden Inhalter. A mengem Fall, zum Beispill, war d'Resultat 9.5458, wat wa mir et ofrennen wier 10 MB RAM an der Moyenne pro Verbindung verbraucht.

Et ass och wichteg ze wëssen wéi vill RAM vum Rescht vun de Prozesser verbraucht gëtt, déi am System aktiv sinn, well de Webservice net deen eenzegen ass, deen am Betribssystem leeft an et ass néideg e gratis RAM-Speicher op der Server sou datt et de Rescht vun den Aufgaben ausféiere kann. Dëst ka mam Kommando ënnendrënner kritt ginn:

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

D'Resultat kritt och a Megabyte vertrueden, an et weist eis ganz präzis de Betrag vum RAM, dee vum Rescht vun de Prozesser verbraucht gëtt; a mengem Fall 800 MB. Mat dëser Informatioun kéinte mir eng allgemeng Berechnung vun der Zuel vun de gläichzäitege Verbindunge maachen, déi mir hätten; Ech rechnen datt mir duerch eng ganz einfach Operatioun kréien.

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

Mat dëser Formel an der Hand, loosst eis virstellen datt mir e Computer mat 4 GB RAM hunn, dat heescht 4096 MB an datt eise Computer déi genannte Resultater huet gewisen; d'Berechnung wier:

(4096 - 800) / 10 = 329 gläichzäiteg Verbindungen

De Problem mat dëser Berechnung ass datt een ze extrem ass, well et de ganzen RAM verbraucht (de Server de Swap verbraucht) an och, am Fall vun enger Datebank, wéi MySQL oder all aner, d'Verbindunge mat him och verbrauchen RAM, sou datt d'Zuel kritt als utopesch Nummer kann qualifizéiert ginn. Dofir, fir Gedächtnis fir méiglech zousätzlech Prozesser ze befreien an och d'Méiglechkeet ze denken d'Verbindunge mat enger Datebank duerchzeféieren, reduzéiere mir d'Zuel vun de Verbindungen op 250.

Elo wou mir eis maximal Unzuel u simultane Verbindungen hunn, musse mir Apache virbereeden fir dës Zuel ze kréien, wat an der Konfiguratiounsdatei vun dësem Uruff gemaach gëtt apache2.conf, deen am / etc / apache2.

Déi betreffend Datei follegt eng Struktur baséiert op moduler, jidd mat sengem entspriechenden Numm, awer mir wären nëmmen an engem vun hinnen interesséiert, deem säin Numm ass  mpm_prefork_module. De betraffene Modul huet folgend Daten als Standard:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxCliente 150 MaxRequestsPerChild 0

Dëse Modul huet eng Serie vu ganz wichtege Parameteren, och wann et ee vun hinne gëtt, déi eis besonnesch interesséieren, genannt Max Clienten. Dëse Parameter spezifizéiert déi maximal Unzuel vu gläichzäiteg Verbindungen a soll geännert ginn 250.

Een Detail fir am Kapp ze behalen ass datt wann e anere Wäert wéi de Standard an deem Parameter spezifizéiert ass, et noutwendeg ass nach een derbäizefügen just VIRUN dësen. Dëse Parameter gëtt genannt Server Limit a setzt d'Limit vun de Verbindungen, déi de Server kéint "halen" och wa se ausserhalb vun der Limit ass.

De ServerLimit Parameter muss ëmmer méi héich sinn wéi d'MaxClients an hei, well et wéineg Spillraum ass, eng Limit vun 270. Dëst géif de Modul esou ausgesinn:

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

Elo wier et nëmmen noutwendeg den Apache Service mam Kommando neistarten: 

/etc/init.d/apache2 neu starten

Mat dësem konnte mir eis optimiséiert Webserver scho genéissen.

Merci.


Den Inhalt vum Artikel hält sech un eis Prinzipie vun redaktionnell Ethik. Fir e Feeler ze mellen klickt hei.

22 Kommentaren, loosst ären

Gitt Äre Kommentar

Är Email Adress gëtt net publizéiert ginn. Néideg Felder sinn markéiert mat *

*

*

  1. Responsabel fir d'Daten: Miguel Ángel Gatón
  2. Zweck vun den Donnéeën: Kontroll SPAM, Kommentarmanagement.
  3. Legitimatioun: Är Zoustëmmung
  4. Kommunikatioun vun den Donnéeën: D'Donnéeë ginn net un Drëttubidder matgedeelt ausser duerch legal Verpflichtung.
  5. Datenspeicher: Datebank gehost vun Occentus Networks (EU)
  6. Rechter: Zu all Moment kënnt Dir Är Informatioun limitéieren, recuperéieren an läschen.

  1.   zetatin sot

    Merci fir de Post!

    1.    drassill sot

      Ech si frou datt Dir et nëtzlech fonnt hutt.

      Merci.

  2.   Michelangelo sot

    Et gëtt e Wee fir Apache an zwee Server ze clusteren, kënnt Dir erkläre wéi et funktionnéiert?

    1.    drassill sot

      Och wann ech eng Theorie doriwwer gelies hunn, hunn ech se ni fir Praxis ugewannt. Trotzdem, vläicht dësen Artikel kann Iech eng Orientéierung an dëser Hisiicht ginn, och wann ech widderhuelen datt ech net d'Geleeënheet hat et an der Praxis ëmzesetzen:

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

    2.    Edward Khalil sot

      Dir hutt laang gefrot, ob Dir net geléist hutt; Ech hunn e Balancéierungsschema mat enger Drëtt Partei, déi als Dateisystem handelt, Dir weist déi Classeure, déi a var / www / html / (a ​​mengem Fall) sinn, op de Dateisystem, sou datt se déi selwecht Informatioun deelen, an Dir wäert méiglecherweis erfuerdert eng virtuell IP déi reagéiert a redirect op d'IPs vun den Apache, dofir kënnt Dir en haproxy besetzen a wann Dir se an héijer Disponibilitéit wëllt, kënnt Dir Keepalive integréieren am Fall wou ee fällt, deen aneren äntwert weider, oder och wann Dir schonn hutt eng Domain fir d'Applikatioun, Dir kënnt balancéiere mat Pound maachen Backends op béid Serveren, fir spezifesch Fäll wéi moodle oder verschidden Uwendungen déi mat enger Datebank a mysql verbannen, musst Dir e Benotzer pro App Server erstellen deen op déiselwecht Datebank weist .

  3.   shamaru sot

    Villmools Merci fir de Post, Dir hutt absolut Recht, de Widder ass déi primär Berechnung, och wann ech mir virstellen datt mir och déi maximal Unzuel u Prozesser berechnen déi eise Prozessor kann handhaben (natierlech fir d'éischt d'Berechnung vum Haaptgediechtnes ze maachen) a wéi d'Disk schwéier verdeelt wier (Beispill Partituren / var = 1TR).

    1.    drassill sot

      Du hues Recht; alles ass wichteg, wéi Temperaturkontroll ënner anerem. Selbstverständlech kann e staarke Prozessor eng méi grouss Zuel u Aufgaben gläichzäiteg mat grousser Effizienz ausféieren, awer d'Zil vun dësem Post war d'Wichtegkeet vum RAM mat der Zuel vun de gläichzäitege Verbindungen z'erklären.

      E gudde Wee fir all dës Faktoren ze kontrolléieren a kucken ob eise Prozessor net saturéiert ass oder wa mir wéineg gratis RAM hunn, wier mat engem Bash-Skript. Vläicht wäert dëse Post, deen ech virun e puer Deeg doriwwer gemaach hunn, fir Iech interessant sinn, deen ech Iech an de folgende Link hannerloossen; Et ass eng global Iwwerwaachung awer et kann interessant sinn fir een:

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

      Wat

  4.   Sergio S. sot

    Ganz gutt Note, villmools Merci!

    1.    drassill sot

      Villmols Merci! Ech hoffen Dir konnt dovu profitéieren.

  5.   Clown sot

    Ech wëll kee Geck sinn ...
    ... Awer andeems Dir d'Zuel vun de Verbindungen erhéicht gitt Dir net méi vulnérabel fir en DDoS Attack?

    1.    drassill sot

      Et ass keng roueg Cretinfro. D'Wourecht ass datt duerch d'Zuel vun de simultane Verbindungen erhéijen, mir Apache géint DDOS Attacken deelweis verstäerken, well Dir musst berécksiichtegen datt d'Zuel vu maximal simultan Verbindungen, déi um Server etabléiert sinn, d'Zuel vun de Gesamt maximal Verbindungen ass, net déi, déi aus kommen een eenzege Benotzer. Also, wärend am Ufank konnten mir nëmmen 150 simultan Verbindungen ënnerstëtzen (egal ob et Verbindunge vun enger legitimer Quell sinn oder net) elo kënne mir op sou vill zielen wéi eise Server ënnerstëtzt, a méi grouss Verbindungen zur selwechter Zäit erfuerderen ouni Service. Selbstverständlech d'Erhéijung vun der maximaler Unzuel u Verbindungen ass net e Wee fir Iech virun dëser Zort Attack ze schützen, mä Dir musst Firewall Politiken implementéieren. Wann zum Beispill de Webservice deen Dir wëllt setzen um Internet ausgesat ass, wier eng Sécherheetsmoossnam déi kéint ëmgesat ginn d'Zousaz vun dëse Linnen zu eiser Firewall:

      iptables -A INGANG -p tcp –syn –port 80 -m connectlimit –connlimit-upto 10 -m state –state NEW -j ACCEPT

      iptables -A INGANG -p tcp –dport 80 -m Staat –Staat ESTABLISERT, RELATED -j AKZEPTÉIEREN

      iptables -A INGANG -p tcp -port 80 -j DROP

      1.    Clown sot

        Ee vun de Charakteristike vun DDoS Attacken ass datt en Ugräifer ka schénge Päck aus verschiddene Richtungen ze schécken, wat verhënnert datt de Floss vu Päck nëmmen aus enger Richtung kënnt.

    2.    drassill sot

      Dir sidd richteg am Sënn datt eng Firewall wéi déi déi ech ageriicht hunn net ganz effizient géint en DDOS Attack ass, well se aus verschiddene Quelle kënnt. Et ass ëmmer nach besser d'Zuel vun de Verbindungen op 10 fir all dës Quellen ze limitéieren anstatt keng Limit ze hunn, sou datt all Quell honnert oder méi Verbindunge kann opbauen.

      Op jiddfer Fall ass de Kit vun der Fro datt wat méi simultan Verbindungen de Server ënnerstëtzt, wat et méi schwéier ass et mat engem DDOS Attack ze klappen, wat et der Säit méi schwéier gëtt vun engem Ugräifer erofgefall ze ginn .

      Merci.

  6.   eliotime3000 sot

    Gutt. Fir elo fuere ech weider mat NGINX op mengem Site fir de VPS net ze folteren.

  7.   Bruno cascio sot

    Schéine Post @Drassill!

    Ech wollt mat eppes bäidroen vläicht méi statistesch wéi Konfiguratioun.
    Och wann den einfachsten a schnellste Wee fir de Verbrauchsparameter mat dem Mëttel ze berechnen ass, vläicht kéinte mir méi streng sinn an de "Median" amplaz vum "Mëttel" benotzen. Wat géif eis retten? Datt d'Zuelen erop schéissen am Fall wou eng Verbindung vill Gedächtnis verbraucht huet. Stellt Iech zum Beispill un déi folgend Clienten déi folgend Wäerter verbrauchen, an der Eenheet vun der Erënnerung déi se wëllen (KB, MB, MiB, etc):

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

    D'Duerchschnëtt géif ongeféier ~ 30 ginn

    An dëst well mir e ganz grousst Enn hunn (150), an d'Berechnunge si verréckt. De Median besteet aus dësen Donnéeën ze bestellen, d'Zuel vun de Proben duerch 2 ze deelen (eist Zentrum) an dann d'Zuel vun där Positioun ze kréien. Mat dësem hätten mir eppes wéi

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

    Also eis Mëttel wier: 8/2 = 4 dat ass ~ 10

    Hei kënnt Dir gesinn datt egal wéi geckeg dat Extremt ka sinn, et wäert eis ëmmer e méi realistesche Wäert ginn. Wa mir e Client bäifügen deen 200 verbraucht, ass eise Median 11, wärend d'Duerchschnëtt vläicht op ...… geet.

    Et ass nëmmen e Bäitrag, an et ass ganz diskutabel, well mat de Verbindungen ass et net verschrauft.

    Lauschtert Leit Linuxera 🙂

  8.   Carlos sot

    Hallo, ech hunn e Problem op mengem dedizéierten Server gehat, an et ass datt all Kéier wann d'Zuel vun ongeféier 250 Leit online zougeet, laut Google Analytics an Echtzäit, mäi Server wéi e fällt an d'Verbindung lues gëtt bis et d'Verbindung fällt op d'Websäit an ni méi eropluede wéi déi Zuel vu Benotzer online, awer wann ech d'Leeschtung vum dedizéierten Server gesinn deen 8GB Ram ass weist et 10% vum Gebrauch, de CPU: 5% vum Gebrauch an der Festplatte an: 1.99% vum Gebrauch.
    Kanns du mir hëllefen? Ech fannen net wat ech maache soll, ass dës Schrëtt d'Léisung?

    1.    drassill sot

      Gudde Carlos.

      De Problem deen Dir beschreift ass ganz heefeg wann de Server net richteg virbereet ass. Äre Server akzeptéiert wuel eng vill méi kleng Zuel vu gläichzäiteg Verbindungen a wann en 250 Verbindungen erreecht, da brécht en of. Nom Handbuch sollt Dir fäeg sinn de Problem ze léisen, och wann Dir eng Datebank op deem Server hutt, musst Dir dës Datebank och optiméieren.

      Merci.

      1.    Carlos sot

        Drassill, ech hunn d'Konfiguratioun gemaach déi Dir erwähnt hutt an et war zefriddestellend, gëschter hunn ech 280 Benotzer online erreecht an de Server huet net hänke gelooss, ech sinn ganz zefridden mat dësem Resultat, an ech wëll och déi aner Saach maachen déi Dir mir sot optimiséieren der Datebank, ¿Wéi erreechen ech dat?

    2.    drassill sot

      D'Datebank Konzept ass ganz op; Et ass net déiselwecht fir mysql als Postgres ze benotzen (zum Beispill). Selbstverständlech weess ech net all Datenbanken; Ech hunn mysql a postgres probéiert, an d'Erhéijung vun de simultane Verbindungen an dëse wier baséiert op de Parameter max Verbindungen; mysql Optimiséierung géif an /etc/my.conf gemaach ginn an de Maximum Connections Parameter misst geännert ginn (ënner anerem). Fir Postgres stattdessen hunn ech en Artikel op mengem Blog deen erkläert wéi een et optiméiere kann dat fir Iech nëtzlech ass oder datt Dir et als Referenz fir Är Datebank benotze kënnt:

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

      Merci.

  9.   Erickson vasquez sot

    Moien, wann ech den éischte Kommando werfen, weist et mir Wäert 0. Wat kéint et sinn?

  10.   Daniel Ojeda sot

    Merci fir dëse Post.

  11.   Rolando Aguilera Salazar sot

    Wat eng gutt Handbuch, déi Informatioun ass Deel vun deem wat ech sichen ... merci!

    Awer elo, wann ech wëll datt wann dës 250 Besucher iwwerschratt ginn, de Visiteur 251 op eng Waardesäit oder virtuell Schlaang geet, kann ech et aus dëser selwechter Konfiguratioun maachen?

    Gréiss a Merci!