5 padomi, kā uzlabot Apache tīmekļa servera veiktspēju


Saskaņā ar neseno Netcraft (labi pazīstams interneta uzņēmums, kas cita starpā nodrošina tīmekļa pārlūkprogrammu lietošanas statistiku) ziņojumu Apache joprojām ir visplašāk izmantotais tīmekļa serveris starp vietnēm un datoriem, kas vērsti uz internetu.

Turklāt Apache turpina novērot vislielāko pieaugumu starp galvenajiem tīmekļa serveriem, kam seko Nginx un IIS. Tādējādi, ja esat sistēmas administrators, kas atbild par Apache instalāciju pārvaldību, jums jāzina, kā pārliecināties, vai jūsu tīmekļa serveris darbojas pēc iespējas labāk atbilstoši jūsu (vai jūsu klienta) vajadzībām.

Šajā rakstā mēs apspriedīsim dažus padomus, kas palīdzēs jums nodrošināt, ka Apache darbosies nevainojami un spēs apstrādāt to pieprasījumu skaitu, kurus jūs sagaidāt no attāliem klientiem.

Tomēr, lūdzu, paturiet prātā, ka Apache netika izstrādāts ar mērķi iestatīt etalonu ierakstus, taču, pat ja tā, tas joprojām spēj nodrošināt augstu veiktspēju gandrīz visos izmantošanas gadījumos, par kuriem jūs domājat.

1. PADOMS: Apache vienmēr atjauniniet līdz jaunākajai versijai

Pats par sevi saprotams, ka jaunākās Apache versijas instalēšana, iespējams, ir viena no pirmajām lietām, kas jāņem vērā. Sākot ar 2015. gada 19. novembri, jaunākā Apache versija, kas pieejama CentOS 7 krātuvēs, ir 2.4.6, savukārt Debian’s - 2.4.10.

Tomēr var būt nesen veikts uzlabojums vai kļūdu labojums, kas pievienots nesen izlaistai stabilai versijai, kas pēc tam ir pieejama lejupielādei un instalēšanai no avota. Šeit ir sniegtas arī apkopošanas un instalēšanas instrukcijas - vienkārši atcerieties, ka, izvēloties šo atjaunināšanas metodi, piesardzības nolūkos, iespējams, vēlēsities dublēt pašreizējos konfigurācijas failus/vietnes/virtuālos resursdatorus.

Jebkurā gadījumā jūs varat pārbaudīt pašreiz instalēto versiju šādi:

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

Parasti izmantojiet atjaunināšanas metodi, kuru nodrošina izvēlētā izplatītāja pakotņu pārvaldnieks ( yum update httpd vai aptitude safe-upgrade apache2 , CentOS vai Debian, attiecīgi), ja vien nav cita ceļa. Jaunākās piezīmes par laidienu var izlasīt Apache HTTP servera projekta vietnes Apache dokumentācija sadaļā.

2. PADOMS: Ja izmantojat kodolu, kas vecāks par 2,4, apsveriet iespēju jaunināt tūlīt

Kāpēc? Kodola versijās 2.4 un jaunākās versijās pēc noklusējuma ir iespējots sendfile kodola sistēmas izsaukums. Tas, savukārt, atvieglo augstas veiktspējas tīkla failu pārsūtīšanu (kas ir vēlams saistībā ar tīmekļa servera un klienta saziņu) un ļauj Apache ātrāk un ar zemāku CPU izmantošanu piegādāt statisko saturu, veicot vienlaicīgas lasīšanas un sūtīšanas darbības.

Pašlaik instalēto kodolu varat apskatīt, izmantojot:

# uname -r

un salīdziniet to ar jaunāko stabilo kodolu vietnē www.kernel.org (4.3 rakstīšanas laikā).

Lai gan tas nav process, kas paredzēts iesācējiem, kodola jaunināšana ir interesants uzdevums, lai uzzinātu vairāk par Linux iekšējiem elementiem.

3. PADOMS: izvēlieties savam gadījumam vislabāk piemēroto daudzapstrādes moduli (MPM)

Praksē MPM paplašina Apache moduļu funkcionalitāti, ļaujot jums izlemt, kā konfigurēt tīmekļa serveri saistīšanai ar mašīnas tīkla portiem, pieņemt klientu pieprasījumus un izmantot bērnu procesus (un alternatīvi pavedienus) šādu pieprasījumu apstrādei.

Sākot ar 2.4 versiju, Apache piedāvā trīs dažādus MPM, no kuriem izvēlēties, atkarībā no jūsu vajadzībām:

  1. prefork MPM izmanto vairākus pakārtotos procesus bez pavedieniem. Katrs process apstrādā vienu savienojumu vienlaikus, nevienam neradot atsevišķus pavedienus. Neiedziļinoties pārāk detalizēti, mēs varam teikt, ka šo MPM vēlaties izmantot tikai atkļūdojot lietojumprogrammu, kas izmanto vai ja jūsu lietojumprogrammai ir jārisina tādi moduļi, kas nav saistīti ar pavedieniem, piemēram, mod_php.
  2. worker MPM izmanto vairākus pavedienus katram pakārtotajam procesam, kur katrs pavediens vienlaikus apstrādā vienu savienojumu. Šī ir laba izvēle augstas plūsmas serveriem, jo tā ļauj apstrādāt vairāk vienlaicīgu savienojumu ar mazāk RAM nekā iepriekšējā gadījumā.
  3. Visbeidzot, event MPM ir noklusējuma MPM lielākajā daļā Apache instalāciju 2.4 un jaunākām versijām. Tas ir līdzīgs darba ņēmēja MPM, jo tas arī rada vairākus pavedienus katram bērna procesam, bet ar priekšrocību: tas liek KeepAlive vai dīkstāves savienojumus (kamēr tie paliek šajā stāvoklī) apstrādāt ar vienu pavedienu, tādējādi atbrīvojot atmiņu, kuru var jāpiešķir citiem pavedieniem. Šis MPM nav piemērots izmantošanai ar tādiem moduļiem, kas nav droši ar diegu, piemēram, mod_php, kuriem tā vietā jāizmanto aizstājējs šāds PHP-FPM.

Lai pārbaudītu MPM, kuru izmantojat Apache instalācijā, varat rīkoties šādi:

# httpd -V

Zemāk redzamajā attēlā redzams, ka tieši šis tīmekļa serveris izmanto prefork MPM.

Lai to mainītu, jums būs jārediģē:

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

Kur var būt mpm_event, mpm_worker vai mpm_prefork.

un komentējiet līniju, kas ielādē vēlamo moduli šādi:

LoadModule mpm_event_module modules/mod_mpm_event.so

Piezīme: Lai notikuma MPM darbotos Debian, jums, iespējams, būs jāinstalē pakete libapache2-mod-fastcgi no bezmaksas krātuvēm.

Turklāt CentOS jums būs nepieciešama php-fpm (kopā ar fcgi un mod_fcgid), savukārt Debianā to sauc par php5-fpm (kopā ar apache2-mpm-event).

Visbeidzot, bet ne mazāk svarīgi, restartējiet tīmekļa serveri un nesen instalēto pakalpojumu php-fpm (vai php5-fpm):

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

Lai gan jūs varat iestatīt Apache izmantot noteiktu MPM, šo konfigurāciju var ignorēt katram virtuālajam resursdatoram tādā pašā veidā, kā norādīts iepriekš.

Vienkārši nometiet atbilstošos tagus katra virtuālā resursdatora konfigurācijas failā, un esat gatavs doties, taču pārliecinieties, vai izmantojat vienu un tikai vienu MPM katram vhost.

Visbeidzot, lūdzu, ņemiet vērā, ka neatkarīgi no jūsu izvēlētā izplatīšanas php-fpm paļaujas uz FastCGI ieviešanu, un tas ir iemesls, kāpēc es iepriekš ieteicu papildu pakotņu instalācijas.

Lai iegūtu sīkāku informāciju un piemērus par php-fpm un to, kā tas kopā ar notikumu MPM var palielināt Apache veiktspēju, skatiet oficiālo dokumentāciju.

Tas ir tas, ko es redzu pēc noklusējuma MPM nomaiņas no prefork uz notikumu tajā pašā lodziņā, kas parādīts iepriekšējā attēlā:

CentOS 7 jums būs jāpārliecinās, ka http un https pakalpojumi ir iespējoti caur ugunsmūri un vai tīkla saskarne (-es) ir pareizi pievienota (-as) noklusējuma zonai.

Piemēram:

# 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

Iemesls, kāpēc es to aktualizēju, ir tāpēc, ka nesen piedzīvoju problēmu, kad noklusējuma ugunsmūra konfigurācijas iestatījumi mākoņa VPS neļāva php-fpm un Apache apstrādāt php failus.

Kā pamata pārbaudi (esmu pārliecināts, ka varat iedomāties sarežģītākas vai stresa pilnas), es izveidošu php failu, kas pārbauda, vai pastāv vēl viens fails ar nosaukumu test.php tajā pašā divu CentOS direktorijā. 7 serveri ar vienādām aparatūras īpašībām un slodzi, bet ar atšķirīgu MPM. Viens no viņiem izmantos notikumu, bet otrs izmantos prefork:

Šis ir php kods, kuru esmu saglabājis failā ar nosaukumu checkiffileexists.php :

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

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

Tad mēs palaidīsim Apache etalona rīku (ab) ar 200 vienlaicīgiem pieprasījumiem, līdz tiks pabeigti 2000 pieprasījumi:

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

Izpildīsim testu un salīdzināsim rezultātus. Pievērsiet uzmanību veiktspējas statistikai:

Kā redzat, servera veiktspēja ar notikumu visos šī testa aspektos ir ļoti pārāka par tā fasādes kolēģi.

PADOMS # 4: gudri piešķiriet RAM Apache

Varbūt vissvarīgākais aparatūras elements, kas jāņem vērā, ir katram Apache procesam piešķirtās RAM apjoms. Lai gan jūs to nevarat tieši kontrolēt, varat ierobežot bērnu procesu skaitu, izmantojot MaxRequestWorkers direktīvu (kas agrāk Apache 2.2 bija pazīstama kā MaxClients), kas ierobežos Apache operatīvās atmiņas izmantošanu. Atkal jūs varat iestatīt šo vērtību katram resursdatoram vai virtuālajam resursdatoram.

Lai to izdarītu, jums jāņem vērā vidējais RAM apjoms, ko izmanto Apache, pēc tam reiziniet to ar MaxRequestWorkers skaitu, un tas ir atmiņas apjoms, kas tiks piešķirts Apache procesiem. Viena lieta, ko jūs nekad nevēlaties, lai jūsu tīmekļa serveris darītu, ir sākt izmantot mijmaiņu, jo tas ievērojami samazinās tā veiktspēju. Tādējādi jums vienmēr vajadzētu saglabāt Apache operatīvās atmiņas izmantošanu ierobežojumos, ko varat atļauties, un nekad nepaļaujieties uz mijmaiņu pret to.

Piemēram, šāds bloks ierobežos vienlaicīgu klientu skaitu līdz 30. Ja vairāk klientu nokļūst resursdatorā, viņiem var rasties kavēšanās vai īslaicīga kļūme, ko var viegli atrisināt, atsvaidzinot pārlūku. Lai gan to var uzskatīt par nevēlamu, tas ir veselīgāk serverim un ilgtermiņā vislabāk piemērots arī jūsu vietnei.

Jūs varat ievietot šo bloku /etc/httpd/conf/httpd.conf vai /etc/apache2/apache2.conf iekšpusē atkarībā no tā, vai izmantojat CentOS vai Debian.

Lūdzu, ņemiet vērā, ka tas pats princips attiecas uz visiem MPM - es šeit izmantoju notikumu, lai turpinātu iepriekšējā padomā izklāstīto koncepciju:

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

Jebkurā gadījumā ir ļoti ieteicams atsaukties uz Apache 2.4 dokumentiem, lai uzzinātu, kuras direktīvas ir atļautas jūsu izvēlētajam MPM.

PADOMS # 5: Pārziniet savas lietojumprogrammas

Parasti nevajadzētu ielādēt Apache moduļus, kas nav noteikti nepieciešami, lai jūsu lietojumprogramma darbotos. Tam būs nepieciešamas vismaz vispārīgas zināšanas par lietojumprogrammām, kas darbojas jūsu serverī, it īpaši, ja esat sistēmas administrators un par attīstību ir atbildīga cita komanda.

Pašlaik ielādētos moduļus varat uzskaitīt ar:

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

Lai izkrautu/atspējotu moduļus CentOS, jums būs nepieciešams komentēt rindu, kas sākas ar LoadModule (vai nu galvenajā konfigurācijas failā, vai palīgdatorā, kas atrodas /etc/httpd/conf.modules.d.

No otras puses, Debian nodrošina rīku ar nosaukumu a2dismod, lai atspējotu moduļus, un tiek izmantots šādi:

# a2dismod module_name

Lai to atkal iespējotu:

# a2enmod module_name

Jebkurā gadījumā atcerieties restartēt Apache, lai izmaiņas stātos spēkā.

Kopsavilkums

Šajā rakstā mēs esam pārskatījuši 5 padomus, kas palīdzēs jums pielāgot Apache tīmekļa serveri un palielināt tā veiktspēju. Turklāt jums jāatceras, ka optimizācija un veiktspēja bez drošības ir bezjēdzīga, tāpēc, iespējams, vēlēsities atsaukties arī uz Apache sacietēšanas padomu rakstu vietnē linux-console.net.

Tā kā mēs šajā rakstā nevaram pietiekami atspoguļot visus šīs tēmas aspektus, iespējams, jūs domājat par citām idejām, kuras vēlaties dalīties ar pārējo kopienu. Ja tā, sazinieties ar mums, izmantojot zemāk esošo komentāru veidlapu.