5 vinkkiä Apache-verkkopalvelimesi suorituskyvyn parantamiseen


Netcraftin (tunnettu Internet-yritys, joka tarjoaa muun muassa verkkoselaimien käyttötilastoja) tuoreen raportin mukaan Apache on edelleen laajimmin käytetty verkkopalvelin sivustojen ja Internetiin johtavien tietokoneiden joukossa.

Lisäksi Apache kokee edelleen suurinta kasvua parhaiden verkkopalvelimien joukossa, ja sitä seuraavat Nginx ja IIS. Jos siis olet järjestelmänvalvoja, joka vastaa Apache-asennusten hallinnasta, sinun on tiedettävä, kuinka varmistaa, että verkkopalvelimesi toimii parhaalla mahdollisella tavalla sinun (tai asiakkaasi) tarpeidesi 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.

Muista kuitenkin, että Apachea ei suunniteltu benchmark-ennätyksiä varten – mutta silti se pystyy tarjoamaan korkean suorituskyvyn lähes kaikissa käyttötapauksissa, joita voit kuvitella.

VINKKI 1: Pidä Apache aina päivitettynä uusimpaan versioon

On sanomattakin selvää, että Apachen uusimman version asentaminen on luultavasti yksi ensimmäisistä asioista, jotka sinun on harkittava. 19. marraskuuta 2015 alkaen Apachen uusin versio, joka on saatavilla CentOS 7 -varastoissa, on 2.4.6, kun taas Debianissa on >2.4.10.

Äskettäin julkaistuun vakaaseen versioon voi kuitenkin olla äskettäin tehty parannus tai virheenkorjaus, joka on sitten ladattavissa ja asennettava lähdekoodista. Tässä on myös käännös- ja asennusohjeet – muista vain, että jos valitset tämän päivitystavan, saatat haluta varmuuskopioida nykyiset määritystiedostot/sivustot/virtuaaliset isännät varotoimenpiteenä.

Joka tapauksessa voit tarkistaa asennetun version seuraavasti:

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

Nyrkkisääntönä on, että noudata valitsemasi jakelun paketinhallinnan tarjoamaa päivitystapaa (yum update httpd tai aptitude safe-upgrade apache2, CentOS tai Debian, vastaavasti), ellei muuta tapaa ole. Voit lukea uusimmat julkaisutiedot Apache-dokumentaatio-osiosta Apache HTTP-palvelinprojektin verkkosivustolla.

VINKKI 2: Jos käytät ydintä, joka on vanhempi kuin 2.4, harkitse päivittämistä nyt

Miksi? Ytimen versioissa 2.4 ja sitä uudemmissa ytimen järjestelmäkutsu sendfile on oletuksena käytössä. Tämä puolestaan helpottaa korkean suorituskyvyn verkkotiedostojen siirtoa (jotka ovat toivottuja verkkopalvelin-asiakasviestinnän yhteydessä) ja mahdollistavat Apachen toimittamaan staattista sisältöä nopeammin ja pienemmällä prosessorin käyttöasteella suorittamalla samanaikaisia luku- ja lähetystoimintoja.

Voit tarkastella tällä hetkellä asennettua ydintäsi:

uname -r

ja vertaa sitä uusimpaan vakaaseen ytimeen osoitteessa www.kernel.org (4.3 tätä kirjoitettaessa).

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

VINKKI #3: Valitse tapauksellesi parhaiten sopiva moniprosessointimoduuli (MPM)

Käytännössä MPM:t laajentavat Apachen modulaarista toiminnallisuutta antamalla sinun päättää, miten verkkopalvelin määritetään sitoutumaan koneen verkkoportteihin, hyväksymään asiakkaiden pyynnöt ja käyttämään aliprosesseja (ja säikeitä, vaihtoehtoisesti) käsitellä tällaisia pyyntöjä.

Versiosta 2.4 alkaen Apache tarjoaa kolme erilaista MPM:ää tarpeidesi mukaan:

  1. prefork MPM käyttää useita aliprosesseja ilman ketjutusta. Jokainen prosessi käsittelee yhden yhteyden kerrallaan luomatta erillisiä säikeitä kullekin. Menemättä liian yksityiskohtiin voimme sanoa, että haluat käyttää tätä MPM:ää vain virheenkorjauksessa sovelluksessa, joka käyttää tai jos sovelluksesi tarvitsee käsitellä ei-säieturvallisia moduuleja, kuten mod_php.
  2. worker MPM käyttää useita säikeitä aliprosesseja kohti, jolloin kukin säie käsittelee yhtä yhteyttä kerrallaan. Tämä on hyvä valinta suuren liikenteen palvelimille, koska se mahdollistaa useamman samanaikaisen yhteyden käsittelyn pienemmällä RAM-muistilla kuin edellisessä tapauksessa.
  3. Lopuksi, event MPM on oletus-MPM useimmissa Apache-asennuksissa versioille 2.4 ja uudemmille. Se on samanlainen kuin työntekijä-MPM siinä mielessä, että se luo myös useita säikeitä aliprosessia kohti, mutta sillä on etu: se aiheuttaa KeepAlive- tai idle-yhteyksiä (kun ne pysyvät tässä tilassa). käsitellä yksi säie, mikä vapauttaa muistia, joka voidaan varata muille säikeille. Tämä MPM ei sovellu käytettäväksi ei-säieturvallisten moduulien, kuten mod_php, kanssa, joiden sijasta on käytettävä korvaavaa moduulia, kuten PHP-FPM.

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

httpd -V

Alla olevasta kuvasta näkyy, että tämä 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 poista kommentit riviltä, joka lataa halutun moduulin seuraavasti:

LoadModule mpm_event_module modules/mod_mpm_event.so

Huomaa: jotta tapahtuman MPM toimisi Debianissa, saatat joutua asentamaan paketin libapache2-mod-fastcgi ei-free-paketista. arkistot.

Lisäksi CentOS:lle tarvitset php-fpm (yhdessä fcgi- ja mod_fcgid-koodin), kun taas Debianissa sen nimi on php5-fpm<. (yhdessä apache2-mpm-event:n kanssa).

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

RedHatissa/CentOS:ssä

systemctl restart httpd php-fpm && systemctl enable httpd php-fpm

Debianissa/Ubuntussa

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 virtuaalipalvelinkohtaisesti samalla tavalla kuin aiemmin mainittiin.

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

Lopuksi huomaa, että valitsemastasi jakelusta riippumatta php-fpm luottaa FastCGI:n toteutukseen, minkä vuoksi suosittelin lisäpakettien asennusta aiemmin.

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

Tämän näen, kun olen vaihtanut oletus-MPM:n preforkista tapahtumaan samassa laatikossa, joka näytettiin edellisessä kuvassa:

CentOS 7:ssä sinun on varmistettava, että http- ja https-palvelut ovat käytössä palomuurin kautta ja että verkkoliittymä(t) ) on lisätty oikein oletusalueelle.

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 otan tämän esiin, johtuu siitä, että koin äskettäin ongelman, jossa pilvi-VPS:n palomuurin oletusmääritysasetukset estivät php-fpm- ja Apachea käsittelemästä php-tiedostoja.

Perustestinä (varmasti voit ajatella monimutkaisempia tai stressaavia) luon php-tiedoston, joka tarkistaa toisen tiedoston, jonka nimi on test.php, olemassaolon kahden CentOS:n samassa hakemistossa. 7 palvelinta, joilla on samat laitteisto-ominaisuudet ja kuormitus, mutta eri MPM. Toinen niistä 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";
}
?>

Tämän jälkeen suoritamme Apachen vertailutyökalun (ab) 200 samanaikaisella pyynnöllä, kunnes 2000 pyyntöä on suoritettu:

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

Suoritetaan testi ja verrataan tuloksia. Kiinnitä huomiota suorituskykytilastoihin:

Kuten näet, tapahtuman sisältävän palvelimen suorituskyky on erittäin parempi kuin sen prefork-vastine tämän testin kaikissa osissa.

VINKKI 4: Varaa RAM viisaasti Apachelle

Ehkä kriittisin laitteisto, joka on otettava huomioon, on kullekin Apache-prosessille varatun RAM-muistin määrä. Vaikka et voi hallita tätä suoraan, voit rajoittaa aliprosessien määrää MaxRequestWorkers-direktiivin avulla (tunnetaan aiemmin nimellä MaxClients Apache 2.2:ssa). mikä asettaa rajoituksia Apachen RAM-muistin käytölle. Jälleen voit asettaa tämän arvon isäntä- tai virtuaalipalvelinkohtaisesti.

Tätä varten sinun tulee huomioida Apachen käyttämä RAM-muistin keskimääräinen määrä ja kertoa se sitten MaxRequestWorkers-määrällä, mikä on Apache-prosesseille varattava muistin määrä. Yksi asia, jota et koskaan halua verkkopalvelimesi tekevän, on aloittaa swapin käyttö, koska se heikentää merkittävästi sen suorituskykyä. Siksi sinun tulee aina pitää Apachen RAM-muistin käyttö rajoissa, joihin sinulla on varaa, äläkä koskaan luota sen vaihtoon.

Esimerkiksi seuraava lohko rajoittaa samanaikaisten asiakkaiden määrän 30:een. Jos useampi asiakas osuu isäntään, he voivat kokea viivettä tai hetkellisen virheen, joka voidaan helposti ratkaista päivittämällä selain. Vaikka tätä voidaan pitää ei-toivottavana, se on terveellisempää palvelimelle ja pitkällä aikavälillä parasta myös sivustollesi.

Voit sijoittaa tämän lohkon sisään /etc/httpd/conf/httpd.conf tai /etc/apache2/apache2.conf sen mukaan, käytätkö CentOS:ää vai Debiania.

Huomaa, että sama periaate pätee kaikkiin MPM:ihin – käytän tapahtumaa tässä jatkaakseni edellisessä vihjeessä 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, että katsot Apache 2.4 -asiakirjoista, mitkä direktiivit ovat sallittuja valitsemallesi MPM:lle.

VINKKI 5: Tunne sovelluksesi

Nyrkkisääntönä on, että sinun ei pitäisi ladata Apache-moduuleja, joita ei välttämättä tarvita sovelluksesi toimimiseen. Tämä edellyttää ainakin yleistä tietämystä palvelimellasi käynnissä olevista sovelluksista, varsinkin jos olet järjestelmänvalvoja ja sinulla on toinen tiimi, joka vastaa kehityksestä.

Voit listata tällä hetkellä ladatut moduulit seuraavasti:

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

Jos haluat purkaa/poistaa moduuleja CentOS:ssä, sinun on kommentoitava rivi, joka alkaa sanoilla LoadModule (joko päämääritystiedostossa tai aputiedostossa -tiedoston sisällä). /etc/httpd/conf.modules.d.

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

a2dismod module_name

Ota se takaisin käyttöön seuraavasti:

a2enmod module_name

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

Yhteenveto

Tässä artikkelissa olemme käyneet läpi 5 vinkkiä, jotka auttavat sinua virittämään Apache-verkkopalvelimen ja parantamaan sen suorituskykyä. Lisäksi sinun tulee muistaa, että optimointi ja suorituskyky ilman suojausta on turhaa, joten sinun kannattaa viitata myös asennusmod_pagespeed-asennusohjeeseen parantaaksesi verkkopalvelimen suorituskykyä ja Apachen vahvistusvinkkejä artikkelissa linux-console.net.

Koska emme voi tässä artikkelissa käsitellä riittävästi tämän aiheen kaikkia näkökohtia, saatat ajatella muita ideoita, jotka haluat jakaa muun yhteisön kanssa. Jos näin on, ilmoita meille vapaasti alla olevan kommenttilomakkeen avulla.