5 nõuannet oma Apache veebiserveri jõudluse suurendamiseks


Netcrafti (tuntud Interneti-ettevõte, mis pakub muude teenuste hulgas veebibrauseri kasutusstatistikat) hiljutise aruande kohaselt on Apache jätkuvalt kõige enam kasutatav veebiserver saitide ja Interneti-põhiste arvutite seas.

Lisaks kogeb Apache jätkuvalt suurimat kasvu peamiste veebiserverite seas, järgnevad Nginx ja IIS. Seega, kui olete Apache installide haldamise eest vastutav süsteemiadministraator, peate teadma, kuidas veenduda, et teie veebiserver toimib oma parima (vastavalt teie (või teie kliendi) vajadustele).

Selles artiklis käsitleme mõningaid näpunäiteid, mis aitavad teil tagada Apache tõrgeteta töötamise ja hallata kaugklientide ootuste arvu.

Pidage siiski meeles, et Apache'i eesmärk ei olnud luua võrdlusrekordeid - kuid sellegipoolest on see siiski võimeline pakkuma kõrget jõudlust peaaegu kõigil kasutatavatel juhtudel.

NÕUANNE 1: Hoidke Apache alati värskeimana

On ütlematagi selge, et Apache uusima versiooni installimine on tõenäoliselt üks esimesi asju, mida peate kaaluma. Alates 19. novembrist 2015 on CentOS 7 hoidlates saadaval olev uusim Apache versioon 2.4.6, Debianis aga 2.4.10.

Siiski võib värskelt välja antud stabiilsele versioonile lisada värske parendus või veaparandus, mis seejärel tehakse allikast allalaadimiseks ja installimiseks kättesaadavaks. Siit leiate ka kompileerimis- ja installimisjuhised - pidage meeles, et kui valite selle värskendusmeetodi, võiksite ettevaatusabinõuna varundada oma praegused konfiguratsioonifailid/saidid/virtuaalsed hostid.

Igal juhul saate oma praegu installitud versiooni kontrollida järgmiselt:

# httpd -v               [On RedHat/CentOS based systems]
# apache2 –v             [On Debian/Ubuntu based systems] 

Rusikareeglina järgige valitud jaotuse paketihalduri pakutavat värskendusmeetodit ( yum update httpd või aptitude safe-upgrade apache2 , CentOSi või Debiani jaoks, vastavalt), kui pole muud võimalust. Uusimaid väljalaskemärkmeid saate lugeda Apache'i HTTP-serveri projekti veebisaidi jaotisest Apache dokumentatsioon.

NÕUANNE nr 2: kui kasutate vanemat kui 2.4 kernelit, kaaluge kohe täiendamist

Miks? Kerneli versioonides 2.4 ja uuemates versioonides on sendfile'i kerneli süsteemikõne vaikimisi lubatud. See omakorda hõlbustab võrgufailide suure jõudlusega edastamist (mida soovitakse veebiserveri ja kliendi vaheliste suhete kontekstis) ja võimaldab Apache'il staatilist sisu kiiremini ja väiksema protsessori kasutamisega edastada, tehes samal ajal lugemis- ja saatmistoiminguid.

Praegu installitud kernelit saate vaadata järgmiselt:

# uname -r

ja võrrelge seda veebisaidi www.kernel.org uusima stabiilse tuumaga (käesoleva kirjutamise ajal 4,3).

Kuigi see pole protsess, mis pole mõeldud algajatele, on kerneli uuendamine huvitav harjutus Linuxi sisemuse kohta lisateabe saamiseks.

NÕUANNE 3: Valige teie juhtumile kõige paremini sobiv mitme protsessori moodul (MPM)

Praktikas laiendavad MPM-id Apache modulaarset funktsionaalsust, võimaldades teil otsustada, kuidas konfigureerida veebiserver masina võrgupordidega sidumiseks, aktsepteerida klientide päringuid ja kasutada selliste taotluste käsitlemiseks alamprotsesse (ja alternatiivselt lõime).

Alates versioonist 2.4 pakub Apache kolme erinevat MPM-i, mille vahel valida vastavalt teie vajadustele:

  1. prefork MPM kasutab mitut alamprotsessi ilma keermestamiseta. Iga protsess haldab korraga ühte ühendust, ilma et luuaks nende jaoks eraldi lõime. Liiga detailidesse laskumata võime öelda, et soovite seda MPM-i kasutada ainult siis, kui silute rakendust, mis kasutab või kui teie rakendus peab tegelema mitte niiditurvaliste moodulitega, näiteks mod_php.
  2. töötaja MPM kasutab alamprotsesside jaoks mitu lõime, kus iga niit haldab korraga ühte ühendust. See on hea valik suure liiklusega serverite jaoks, kuna see võimaldab suurema arvu samaaegsete ühenduste haldamist vähem RAM-iga kui eelmisel juhul.
  3. Lõpuks on event MPM vaikimisi MPM enamikus Apache'i installides versioonide 2.4 ja uuemate versioonide jaoks. See sarnaneb töötaja MPM-iga selle poolest, et loob ka ühe lapse protsessi kohta mitu lõime, kuid millel on eelis: see põhjustab KeepAlive'i või tühikäiguliste ühenduste (samal ajal kui need jäävad sellesse olekusse) ühe lõime abil tööd, vabastades seega mälu eraldada teistele lõimedele. See MPM ei sobi kasutamiseks niidita ohutute moodulitega nagu mod_php, mille puhul tuleb kasutada sellist PHP-FPM-i.

Apache'i installis kasutatava MPM-i kontrollimiseks võite teha järgmist.

# httpd -V

Alloleval pildil on näha, et just see veebiserver kasutab prefork MPM-i.

Selle muutmiseks peate muutma:

# /etc/httpd/conf.modules.d/00-mpm.conf          [On RedHat/CentOS based systems]
# /etc/apache2/mods-available/<mpm>.load   [On Debian/Ubuntu based systems]

Kus võib olla mpm_event, mpm_worker või mpm_prefork.

ja kommenteerige rida, mis laadib soovitud mooduli nii:

LoadModule mpm_event_module modules/mod_mpm_event.so

Märkus. Selleks, et sündmuse MPM Debianis toimiks, peate võib-olla installima paketi libapache2-mod-fastcgi mittevabadest hoidlatest.

Lisaks vajate CentOS-i jaoks php-fpm (koos fcgi ja mod_fcgid), samas kui Debianis nimetatakse seda php5-fpm (koos apache2-mpm-eventiga).

Viimane, kuid mitte vähem oluline, taaskäivitage veebiserver ja äsja installitud teenus php-fpm (või php5-fpm):

# systemctl restart httpd php-fpm && systemctl enable httpd php-fpm
# systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm

Ehkki saate seadistada Apache'i kasutama konkreetset MPM-i, saab selle konfiguratsiooni virtuaalse hosti alusel alistada samal viisil, nagu varem märgitud.

Pange lihtsalt vastavad märgendid iga virtuaalse masina konfiguratsioonifaili ja olete valmis minema - kuid veenduge, et kasutaksite ühte ja ainult ühte MPM-i vhosti kohta.

Lõpuks palun pange tähele, et sõltumata teie valitud levitamisest toetub php-fpm FastCGI rakendamisele, mis on põhjus, miks soovitasin pakettide täiendavaid installe varem.

Lisateavet ja näiteid php-fpm kohta ja selle kohta, kuidas see koos MPM-i sündmusega Apache jõudlust suurendada, peaksite lugema ametlikku dokumentatsiooni.

Seda näen pärast eelmise pildi näidatud kasti vaikimisi MPM-i muutmist preforkist sündmuseks:

CentOS 7-s peate veenduma, et http ja https-teenused on tulemüüri kaudu lubatud ja et võrguliides (ed) on korralikult tsooni lisatud.

Näiteks:

# firewall-cmd --zone=internal --add-interface=tun6to4 
# firewall-cmd --zone=internal --add-interface=tun6to4 --permanent 
# firewall-cmd --set-default-zone=internal 
# firewall-cmd --add-service=http 
# firewall-cmd --add-service=https 
# firewall-cmd --add-service=http --permanent 
# firewall-cmd --add-service=https --permanent 
# firewall-cmd --reload

Selle esiletõstmise põhjuseks on asjaolu, et hiljuti kogesin probleemi, mille tulemüüri vaikeseadistused pilve VPS-is takistasid php-fpm ja Apache php-failide töötlemist.

Põhitestina (olen kindel, et võite mõelda ka keerulisematele või stressirohkematele), loon PHP-faili, mis kontrollib teise CentOS-i samasse kataloogi kuuluva teise faili nimega test.php . 7 sama riistvaraomaduste ja koormusega, kuid erineva MPM-iga serverit. Üks neist kasutab sündmust ja teine prefork:

See on php-kood, mille olen salvestanud faili nimega checkiffileexists.php :

<?php
$filename = 'test.php';

if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}
?>

Seejärel käivitame Apache'i võrdlustööriista (ab) 200 samaaegse taotlusega, kuni 2000 taotlust on täidetud:

# ab -k -c 100 -n 2000 localhost/checkiffileexists.php

Käivitame testi ja võrdleme tulemusi. Pöörake tähelepanu toimivusstatistikale:

Nagu näete, on serveri jõudlus sündmusega selle testi igas aspektis ülitugev võrreldes selle preforkiga.

NÕUANNE 4: Määrake RAM-i targalt Apache jaoks

Võib-olla kõige olulisem riistvara, mida tuleb arvesse võtta, on iga Apache'i protsessi jaoks eraldatud RAM-i maht. Kuigi te ei saa seda otseselt juhtida, saate alamprotsesside arvu piirata MaxRequestWorkersi direktiivi kaudu (varem Apache 2.2-s tuntud kui MaxClients), mis seab piirangud Apache'i RAM-i kasutamisele. Jällegi saate selle väärtuse määrata iga hosti või virtuaalse hosti kohta.

Selleks peaksite teadmiseks võtma Apache keskmise RAM-i keskmise hulga, seejärel korrutama selle MaxRequestWorkersi arvuga ja see on Apache-protsesside jaoks eraldatud mälumaht. Üks asi, mida te kunagi ei soovi, et teie veebiserver teeks, on hakata vahetama, kuna see vähendab oluliselt selle jõudlust. Seega peaksite alati hoidma Apache'i RAM-i kasutamist lubatud piirides ja mitte kunagi lootma selle vahetamisele.

Näiteks piirab järgmine plokk samaaegsete klientide arvu 30-ni. Kui hosti saabub rohkem kliente, võib neil tekkida viivitus või hetkeline rike, mille saab hõlpsasti lahendada brauseri värskendamisega. Kuigi seda võib pidada ebasoovitavaks, on see serverile tervislikum ja pikemas perspektiivis parim ka teie saidi jaoks.

Selle ploki saate paigutada /etc/httpd/conf/httpd.conf või /etc/apache2/apache2.conf sisse, olenevalt sellest, kas kasutate CentOS-i või Debiani.

Pange tähele, et kõigi MPM-ide puhul kehtib sama põhimõte - ma kasutan sündmust siin, et jätkata eelmises näpunäites kirjeldatud kontseptsiooniga:

<IfModule mpm_event_module>
    StartServers 3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit                      64
    ThreadsPerChild          25
    MaxRequestWorkers    30
    MaxConnectionsPerChild    1000
</IfModule>

Igal juhul on tungivalt soovitatav vaadata Apache 2.4 dokumentidest, et näha, millised direktiivid on teie valitud MPM-i jaoks lubatud.

NÕUANNE 5: tundke oma rakendusi

Rusikareeglina ei tohiks te laadida ühtegi Apache moodulit, mis pole teie rakenduse toimimiseks tingimata vajalikud. See nõuab vähemalt üldisi teadmisi teie serveris töötavate rakenduste kohta, eriti kui olete süsteemiadministraator ja arenduse eest vastutab veel üks meeskond.

Praegu laaditud moodulid saate loetleda järgmisega:

# httpd -M          [On RedHat/CentOS based systems]
# apache2ctl -M     [On Debian/Ubuntu based systems]

Moodulite CentOS-is mahalaadimiseks/keelamiseks peate kommenteerima rida, mis algab LoadModule'iga (kas peamises konfiguratsioonifailis või abimaterjalis /etc/httpd/conf.modules.d.

Teisalt pakub Debian moodulite keelamiseks tööriista nimega a2dismod ja seda kasutatakse järgmiselt:

# a2dismod module_name

Selle uuesti lubamiseks tehke järgmist.

# a2enmod module_name

Mõlemal juhul pidage meeles, et muudatuste jõustumiseks taaskäivitage Apache.

Kokkuvõte

Selles artiklis vaatasime läbi viis nõuannet, mis aitavad teil Apache veebiserverit häälestada ja selle jõudlust suurendada. Lisaks peaksite meeles pidama, et optimeerimine ja jõudlus ilma turbeta on mõttetu, seega võiksite viidata ka linux-console.net-i Apache'i kõvenemisnõuannete artiklile.

Kuna me ei saa selles artiklis kõiki selle teema aspekte piisavalt kajastada, mõtlete ehk ka teistele ideedele, mida soovite ülejäänud kogukonnaga jagada. Kui jah, andke meile sellest teada, kasutades allolevat kommentaarivormi.