5 vinkkiä Apache-verkkopalvelimesi suorituskyvyn parantamiseen


Netcraftin (tunnettu Internet-yritys, joka tarjoaa muun muassa verkkoselaimen käyttötilastoja) tuoreen raportin mukaan Apache on edelleen yleisimmin käytetty palvelin sivustojen ja Internet-tietokoneiden joukossa.

Lisäksi Apache kokee jatkuvasti suurimman kasvun parhaiden verkkopalvelimien joukossa, jota seuraavat Nginx ja IIS. Jos siis olet Apache-asennusten hallinnasta vastaava järjestelmänvalvoja, sinun on tiedettävä, miten voit varmistaa, että verkkopalvelimesi toimii parhaalla mahdollisella tavalla omien (tai asiakkaasi) tarpeiden mukaan.

Tässä artikkelissa käsittelemme muutamia vinkkejä, jotka auttavat sinua varmistamaan, että Apache toimii sujuvasti ja pystyy käsittelemään etäasiakkailta odottamiesi pyyntöjen määrän.

Pidä kuitenkin mielessä, että Apache ei ole suunniteltu vertailutietueiden asettamista varten - mutta silti se pystyy silti tarjoamaan korkeaa suorituskykyä melkein kaikissa käyttötapauksissa, joita vain ajatella voi.

VINKKI # 1: Pidä Apache aina päivitettynä uusimpaan versioonsa

On sanomattakin selvää, että uusimman Apache-version asentaminen on todennäköisesti yksi ensimmäisistä asioista, jotka sinun on harkittava. 19. marraskuuta 2015 alkaen CentOS 7 -tietovarastojen uusin Apache-versio on 2.4.6, kun taas Debianin versiossa 2.4.10.

Äskettäin julkaistuun vakaaseen versioon voi kuitenkin liittyä viimeaikainen parannus tai virhekorjaus, joka on sitten ladattavissa ja asennettavissa lähteestä. Täällä on myös kokoamis- ja asennusohjeet - muista vain, että jos valitset tämän päivitystavan, sinun kannattaa varmuuskopioida nykyiset kokoonpanotiedostosi/sivustosi/virtuaaliset isäntät.

Joka tapauksessa voit tarkistaa nykyisen asennetun version seuraavasti:

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

Pidä nyrkkisääntönä kiinni valitsemasi jakelun paketinhallinnan tarjoamasta päivitysmenetelmästä ( yum update httpd tai aptitude safe-upgrade apache2 , CentOS: lle tai Debianille, vastaavasti), ellei ole muuta tapaa. Voit lukea uusimmat julkaisutiedot Apache-dokumentaatio-osiosta Apache HTTP -palvelinprojektin verkkosivustolta.

VINKKI # 2: Jos käytät yli 2.4 vanhempaa ydintä, harkitse päivittämistä nyt

Miksi? Ytimen versiot 2.4 ja uudemmat ovat sendfile-ytimen järjestelmäkutsu oletusarvoisesti käytössä. Tämä puolestaan helpottaa korkean suorituskyvyn verkkotiedostojen siirtoja (joita halutaan web-palvelin-asiakas-viestinnän yhteydessä) ja mahdollistaa Apache: n toimittavan staattista sisältöä nopeammin ja pienemmällä suorittimen käyttöasteella suorittamalla samanaikaisia luku- ja lähetystoimintoja.

Voit tarkastella asennettua ydintä seuraavilla tavoilla:

# uname -r

ja vertaa sitä viimeisimpään vakaan kerneliin osoitteessa www.kernel.org (4.3 tämän kirjoituksen aikaan).

Vaikka prosessia ei ole tarkoitettu aloittelijoille, ytimen päivittäminen on mielenkiintoinen harjoitus oppia lisää Linuxin sisäisistä osista.

VINKKI # 3: Valitse tapauksellesi parhaiten soveltuva moniprosessimoduuli (MPM)

Käytännössä MPM: t laajentavat Apachen modulaarista toiminnallisuutta antamalla sinun päättää, kuinka määritetään verkkopalvelin sitoutumaan koneen verkkoportteihin, hyväksymään asiakkaiden pyynnöt ja käyttämään lasten prosesseja (ja ketjuja vaihtoehtoisesti) tällaisten pyyntöjen käsittelemiseksi.

Versiosta 2.4 alkaen Apache tarjoaa kolme erilaista MPM: ää, joista voit valita tarpeidesi mukaan:

  1. prefork MPM käyttää useita aliprosesseja ilman ketjutusta. Jokainen prosessi käsittelee yhden yhteyden kerrallaan luomatta erillisiä ketjuja kullekin. Laskematta liikaa yksityiskohtiin voimme sanoa, että haluat käyttää tätä MPM: ää vain virheenkorjauksessa sovellusta, joka käyttää tai jos sovelluksesi on käsiteltävä muita kuin langattomia moduuleja, kuten mod_php.
  2. työntekijä MPM käyttää useita säikeitä aliprosesseja kohden, jolloin kukin ketju käsittelee yhtä yhteyttä kerrallaan. Tämä on hyvä valinta suuren liikenteen palvelimille, koska se mahdollistaa useamman samanaikaisen yhteyden käsittelemisen vähemmän RAM-muistia kuin edellisessä tapauksessa.
  3. Lopuksi tapahtuma MPM on oletus-MPM useimmissa Apache-asennuksissa versioille 2.4 ja uudemmille. Se on samanlainen kuin työntekijän MPM, koska se luo myös useita säikeitä per lapsiprosessi, mutta sillä on etuna: se saa KeepAlive- tai tyhjäkäynnin (kun ne pysyvät tilassa) käsiteltäväksi yhdellä langalla, mikä vapauttaa muistia voidaan jakaa muille ketjuille. Tämä MPM ei sovi käytettäväksi muiden kuin langattomien moduulien kanssa, kuten mod_php, joille on käytettävä korvaavaa tällaista PHP-FPM: ää.

Voit tarkistaa Apache-asennuksesi käyttämän MPM: n seuraavasti:

# httpd -V

Alla oleva kuva osoittaa, että kyseinen verkkopalvelin käyttää prefork MPM: ää.

Jos haluat muuttaa tätä, sinun on muokattava:

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

Missä voi olla mpm_event, mpm_worker tai mpm_prefork.

ja kommentoi riviä, joka lataa halutun moduulin näin:

LoadModule mpm_event_module modules/mod_mpm_event.so

Huomaa: Jotta tapahtuman MPM toimisi Debianissa, joudut ehkä asentamaan paketin libapache2-mod-fastcgi vapaista arkistoista.

Lisäksi CentOS tarvitsee php-fpm (sekä fcgi ja mod_fcgid), kun taas Debianissa sitä kutsutaan php5-fpm (yhdessä apache2-mpm-tapahtuman kanssa).

Viimeisenä, mutta ei vähäisimpänä, käynnistä verkkopalvelin ja vasta asennettu php-fpm (tai php5-fpm) -palvelu uudelleen:

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

Vaikka voit asettaa Apachen käyttämään tiettyä MPM: ää, tämä kokoonpano voidaan ohittaa virtuaalikoneittain samalla tavalla kuin aiemmin ilmoitettiin.

Pudota vain vastaavat tagit kunkin virtuaalisen isännän määritystiedostoon ja olet valmis menemään - mutta varmista, että käytät yhtä ja vain yhtä MPM: ää per vhost.

Lopuksi, huomioi, että valitsemastasi jakelusta riippumatta, php-fpm perustuu FastCGI: n käyttöönottoon, minkä vuoksi suosittelin lisäpakettiasennuksia aikaisemmin.

Lisätietoja ja esimerkkejä php-fpm: stä ja siitä, miten se voi yhdessä MPM-tapahtuman kanssa lisätä Apachen suorituskykyä, on virallisessa dokumentaatiossa.

Tämän näen muutettuani oletus-MPM: n esiasennosta tapahtumaan samassa ruudussa kuin edellisessä kuvassa:

CentOS 7: ssä sinun on varmistettava, että http- ja https-palvelut on otettu käyttöön palomuurin kautta ja että verkkoliitännät on lisätty oikein oletusvyöhykkeeseen.

Esimerkiksi:

# 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

Syy, miksi tuon tämän esiin, johtuu siitä, että kokin äskettäin ongelman, jossa palomuurin oletusasetukset pilvi-VPS: ssä estivät php-fpm: tä ja Apachea käsittelemästä php-tiedostoja.

Perustestinä (olen varma, että voit ajatella monimutkaisempia tai stressaavampia), luon php-tiedoston, joka tarkistaa toisen tiedoston nimeltä test.php kahden CentOS: n samassa hakemistossa. 7 palvelinta, joilla on samat laitteisto-ominaisuudet ja kuormitus, mutta eri MPM. Yksi heistä käyttää tapahtumaa ja toinen preforkia:

Tämä on php-koodi, jonka olen tallentanut tiedostoon nimeltä checkiffileexists.php :

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

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

Sitten suoritamme Apache-vertailutyökalun (ab) 200 samanaikaisella pyynnöllä, kunnes 2000 pyyntöä on valmis:

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

Suoritetaan testi ja verrataan tuloksia. Kiinnitä huomiota suoritustilastoihin:

Kuten näette, palvelimen suorituskyky tapahtumien kanssa on tämän testin kaikilla osa-alueilla korkeampi kuin sen prefork-vastine.

VINKKI # 4: Määritä RAM-muistia viisaasti Apachelle

Ehkä kriittisin laitteistokohde, joka on otettava huomioon, on kullekin Apache-prosessille varattu RAM-muisti. Vaikka et voi hallita tätä suoraan, voit rajoittaa aliprosessien määrää MaxRequestWorkers-direktiivillä (tunnettiin aiemmin nimellä MaxClients Apache 2.2: ssa), joka asettaa rajoituksia Apachen RAM-muistin käytölle. Jälleen voit asettaa tämän arvon isäntää tai virtuaalista isäntää kohti.

Tätä varten sinun on otettava huomioon Apachen käyttämän keskimääräisen RAM-muistin määrä ja kerrottava se sitten MaxRequestWorkers -määrällä, joka on Apache-prosesseille varattu muistimäärä. Yksi asia, jota et koskaan halua verkkopalvelimesi tekevän, on aloittaa swapin käyttö, koska se vähentää merkittävästi sen suorituskykyä. Siksi sinun on aina pidettävä Apachen RAM-muistin käyttö rajoissa, joihin sinulla on varaa, eikä koskaan luottaa siihen, että vaihdat sitä.

Esimerkiksi seuraava lohko rajoittaa samanaikaisten asiakkaiden määrän 30: een. Jos useampia asiakkaita osuu isäntään, he voivat kokea viiveen tai hetkellisen vian, joka voidaan helposti ratkaista päivittämällä selain. Vaikka tätä voidaan pitää epätoivottavana, se on terveellisempää palvelimelle ja pitkällä aikavälillä paras myös sivustollesi.

Voit sijoittaa tämän lohkon kohtaan /etc/httpd/conf/httpd.conf tai /etc/apache2/apache2.conf riippuen siitä, käytätkö CentOSia vai Debiania.

Huomaa, että sama periaate pätee kaikkiin MPM: iin - käytän tapahtumaa tässä jatkaakseni edellisessä vinkissä hahmoteltua käsitettä:

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

Joka tapauksessa on erittäin suositeltavaa viitata Apache 2.4 -asiakirjoihin nähdäksesi, mitkä direktiivit ovat sallittuja valitsemallesi MPM: lle.

VINKKI # 5: Tunne sovelluksesi

Nyrkkisääntönä ei pidä ladata Apache-moduuleja, joita ei ehdottomasti tarvita sovelluksesi toimimiseen. Tämä edellyttää ainakin yleistä tietoa palvelimellasi käynnissä olevista sovelluksista, varsinkin jos olet järjestelmänvalvoja ja kehityksestä vastaa toinen tiimi.

Voit luetella ladatut moduulit seuraavilla tavoilla:

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

Jos haluat purkaa moduuleja/poistaa ne käytöstä CentOSissa, sinun on kommentoitava rivi, joka alkaa LoadModule-ohjelmalla (joko pääasetustiedostossa tai aputiedostossa /etc/httpd/conf.modules.d.

Toisaalta Debian tarjoaa työkalun nimeltä a2dismod moduulien poistamiseksi käytöstä ja sitä käytetään seuraavasti:

# a2dismod module_name

Ota se takaisin käyttöön:

# a2enmod module_name

Kummassakin tapauksessa muista käynnistää Apache uudelleen, jotta muutokset astuvat voimaan.

Yhteenveto

Tässä artikkelissa olemme tarkastelleet 5 vinkkiä, joiden avulla voit virittää Apache-verkkopalvelinta ja lisätä sen suorituskykyä. Lisäksi sinun on muistettava, että optimointi ja suorituskyky ilman tietoturvaa ovat turhia, joten kannattaa ehkä viitata myös linux-console.netin Apache-kovettumisvihjeitä koskevaan artikkeliin.

Koska emme voi käsitellä kaikkia tämän aiheen näkökohtia tässä artikkelissa, ajattelet ehkä muita ideoita, jotka haluaisit jakaa muulle yhteisölle. Jos on, ilmoita siitä meille alla olevan kommenttilomakkeen avulla.