5 Tipps fir d'Performance vun Ärem Apache Webserver ze Boost


Laut engem rezente Bericht vun Netcraft (eng bekannt Internetfirma déi ënner anerem Servicer Webbrowser Benotzungsstatistiken ubitt), ass Apache weider dee verbreetste Webserver tëscht Siten an Internet-konfrontéiert Computeren.

Zousätzlech erliewen Apache de gréisste Wuesstum ënner den Top Webserver, gefollegt vun Nginx an IIS. Also, wann Dir e System Administrateur sidd, deen zoustänneg ass fir d'Gestioun vun Apache Installatiounen, musst Dir wësse wéi Dir sécher sidd datt Äre Webserver am beschten vu senger Kapazitéit no Ärem (oder Äre Client seng) Bedierfnesser funktionnéiert.

An dësem Artikel wäerte mir e puer Tipps diskutéieren, déi Iech hëllefe sécherzestellen datt Apache glat leeft a fäeg ass d'Zuel vun Ufroen ze handhaben, déi Dir vu Remote Clienten erwaart.

Wéi och ëmmer, behalen w.e.g. datt Apache net mam Zil entworf gouf Benchmark Records ze setzen - awer trotzdem ass et nach ëmmer fäeg fir héich Leeschtung a bal all Benotzungsfall ze liwweren deen Dir eventuell denke kënnt.

TIP #1: Halt Apache ëmmer op seng lescht Versioun aktualiséiert

Et seet selbstverständlech datt déi lescht Versioun vun Apache installéiert ass wahrscheinlech eng vun den éischte Saachen déi Dir braucht ze berücksichtegen. Vum November 19, 2015, ass déi lescht Versioun vun Apache verfügbar an den CentOS 7 Repositories 2.4.6, wärend an Debian 2.4.10 ass.

Wéi och ëmmer, et kann eng rezent Verbesserung oder e Bugfix ginn, deen zu enger nei verëffentlechter stabiler Versioun bäigefüügt gouf, déi dann zur Verfügung gestallt gëtt fir aus der Quell erofzelueden an z'installéieren. Kompilatiouns- an Installatiounsinstruktiounen ginn och hei zur Verfügung gestallt - erënnert just drun datt wann Dir dës Updatemethod auswielt, wëllt Dir vläicht Är aktuell Konfiguratiounsdateien/Siten/virtuelle Hosten als Virsiichtsmoossnam backen.

Op alle Fall kënnt Dir Är aktuell installéiert Versioun wéi follegt kontrolléieren:

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

Als Fauschtregel, bleift mat der Updatemethod, déi vum Package Manager vun Ärer gewielter Verdeelung geliwwert gëtt (yum update httpd oder aptitude safe-upgrade apache2, fir CentOS oder Debian, respektiv) ausser et gëtt keng aner Manéier. Dir kënnt déi lescht Verëffentlechungsnotizen an der Apache Dokumentatioun Sektioun op der Apache HTTP Server Project Websäit liesen.

TIP #2: Wann Dir e Kernel benotzt méi al wéi 2.4, betruecht elo Upgrade

Firwat? Kernel Versiounen 2.4 a méi héich hunn de Sendfile Kernel System Uruff als Standard aktivéiert. Dat erliichtert, am Tour, High-Performance-Netzwierkdateientransferen (déi gewënscht sinn am Kontext vu Webserver-Client Kommunikatiounen) an erméiglecht den Apache statesche Inhalt méi séier a mat enger méi niddereger CPU Notzung ze liwweren andeems se simultan Lies- a Sendoperatioune maachen.

Dir kënnt Ären aktuell installéierten Kernel kucken mat:

# uname -r

a vergläicht et mam leschte stabile Kärel op www.kernel.org (4.3 zum Zäitpunkt vun dësem Schreiwen).

Och wann et e Prozess ass deen net fir Ufänger geduecht ass, ass d'Upgrade vun Ärem Kernel eng interessant Übung fir méi iwwer d'Internal vu Linux ze léieren.

TIP #3: Wielt de Multi-Processing Modul (MPM) deen am Beschten fir Äre Fall funktionnéiert

An der Praxis verlängeren MPMs d'modulär Funktionalitéit vun Apache andeems Dir Iech entscheet wéi Dir de Webserver konfiguréiert fir un Netzwierkporten op der Maschinn ze binden, Ufroe vu Clienten akzeptéieren, a Kannerprozesser benotzen (an Threads, alternativ) fir sou Ufroen ze handhaben.

Vun der Versioun 2.4 un, bitt Apache dräi verschidde MPMs fir ze wielen, ofhängeg vun Äre Besoinen:

  1. De Prefork MPM benotzt verschidde Kannerprozesser ouni Threading. All Prozess geréiert eng Verbindung gläichzäiteg ouni separat Threads fir all ze kreéieren. Ouni ze vill Detailer anzegoen, kënne mir soen datt Dir dësen MPM nëmmen benotze wëllt wann Dir eng Applikatioun debuggéiert déi benotzt, oder wann Är Applikatioun muss mat net-thread-safe Moduler wéi mod_php ëmgoen.
  2. Den Aarbechter MPM benotzt verschidde Threads pro Kandprozesser, wou all Thread eng Verbindung gläichzäiteg behandelt. Dëst ass eng gutt Wiel fir High-Traffic Serveren, well et erlaabt méi gläichzäiteg Verbindunge mat manner RAM ze behandelen wéi am virege Fall.
  3. Endlech ass den Event MPM den Default MPM an de meeschte Apache Installatiounen fir Versiounen 2.4 a méi héich. Et ass ähnlech wéi den Aarbechter MPM an datt et och multiple Threads pro Kandprozess erstellt awer mat engem Virdeel: et verursaacht KeepAlive oder Idle Verbindungen (während se an deem Zoustand bleiwen) vun engem eenzege Fuedem gehandhabt ginn, sou datt d'Erënnerung befreit déi kann op aner Threads zougewisen ginn. Dëse MPM ass net gëeegent fir ze benotzen mat net-thread-safe Moduler wéi mod_php, fir déi amplaz en Ersatz wéi eng PHP-FPM muss benotzt ginn.

Fir den MPM vun Ärer Apache Installatioun ze kontrolléieren, kënnt Dir maachen:

# httpd -V

D'Bild hei ënnen weist datt dëse spezielle Webserver de Prefork MPM benotzt.

Fir dëst z'änneren, musst Dir änneren:

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

Wou kann mpm_event, mpm_worker oder mpm_prefork sinn.

an decommentéiert d'Linn déi de gewënschten Modul esou lued:

LoadModule mpm_event_module modules/mod_mpm_event.so

Bemierkung: Fir den Event MPM an Debian ze maachen, musst Dir vläicht de libapache2-mod-fastcgi Package vun den net-gratis Repositories installéieren.

Zousätzlech, fir CentOS braucht Dir php-fpm (zesumme mat fcgi a mod_fcgid) wärend an Debian et php5-fpm genannt gëtt (zesumme mat apache2-mpm-Event).

Lescht, awer net zulescht, nei starten de Webserver an den nei installéierten php-fpm (oder php5-fpm) Service:

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

Och wann Dir Apache setzen fir e spezifesche MPM ze benotzen, kann dës Konfiguratioun op enger per-virtueller Hostbasis op déiselwecht Manéier wéi virdru uginn.

Gitt just déi entspriechend Tags an d'Konfiguratiounsdatei fir all virtuelle Host erof an Dir sidd prett ze goen - awer gitt sécher datt Dir een an nëmmen een MPM pro vhost benotzt.

Schlussendlech bemierkt w.e.g. datt onofhängeg vun Ärer gewielter Verdeelung php-fpm op d'Ëmsetzung vu FastCGI hänkt, wat de Grond ass firwat ech déi zousätzlech Packageinstallatiounen virdru recommandéiert hunn.

Fir méi Detailer an Beispiller iwwer php-fpm a wéi et zesumme mam Event MPM d'Performance vun Apache erhéijen, sollt Dir op déi offiziell Dokumentatioun referenzéieren.

Dëst ass wat ech gesinn nodeems ech den Default MPM vun Prefork op Event an der selwechter Këscht am viregten Bild geännert hunn:

Am CentOS 7 musst Dir sécher sinn datt d'http- an https-Servicer duerch d'Firewall aktivéiert sinn, an datt d'Netzwierk-Interface(n) richteg an d'Standardzon bäigefüügt ginn.

Zum Beispill:

# 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

De Grond firwat ech dat bréngen ass well ech viru kuerzem en Thema erlieft hunn wou d'Standard Firewalld Konfiguratiounsastellungen an enger Cloud VPS verhënnert hunn php-fpm an Apache vu php Dateien ze veraarbecht.

Als Basistest (ech si sécher datt Dir méi komplizéiert oder stresseg denke kënnt), erstellen ech eng php-Datei déi d'Existenz vun enger anerer Datei mam Numm test.php am selwechte Verzeechnes vun zwee CentOS iwwerpréift. 7 Server mat der selwechter Hardware Charakteristiken a Laascht awer mat verschiddene MPM. Ee vun hinnen wäert Event benotzen an deen aneren benotzt Prefork:

Dëst ass de php Code deen ech an eng Datei mam Numm checkiffileexists.php gespäichert hunn:

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

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

Da lafen mir den Apache Benchmark Tool (ab) mat 200 simultan Ufroe bis 2000 Ufroe fäerdeg sinn:

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

Loosst eis den Test lafen an d'Resultater vergläichen. Opgepasst op d'Leeschtungsstatistiken:

Wéi Dir kënnt gesinn, ass d'Performance vum Server mat Event héich iwwer seng Prefork Géigespiller an all Aspekt vun dësem Test.

TIP #4: Allokéiert RAM sënnvoll fir Apache

Vläicht déi kriteschst Hardwareartikel, déi berücksichtegt gëtt, ass de Betrag vum RAM, deen fir all Apache-Prozess zougewisen ass. Och wann Dir dëst net direkt kontrolléiere kënnt, kënnt Dir d'Zuel vun de Kannerprozesser duerch d'MaxRequestWorkers Direktiv beschränken (fréier als MaxClients an Apache 2.2 bekannt), déi Limiten op d'RAM Notzung vun Apache setzen. Erëm, Dir kënnt dëse Wäert op engem Host oder pro virtuelle Hostbasis setzen.

Fir dëst ze maachen, sollt Dir den duerchschnëttleche Betrag vum RAM vun Apache notéieren, da multiplizéiert se mat der Unzuel vu MaxRequestWorkers, an dat ass d'Quantitéit un Erënnerung déi fir Apache Prozesser zougewisen gëtt. Eng Saach déi Dir ni wëllt datt Äre Webserver mécht ass Swap ze benotzen, well dat wäert seng Leeschtung wesentlech reduzéieren. Also sollt Dir ëmmer d'Benotzung vum RAM vun Apache bannent de Grenzen halen déi Dir leeschte kënnt an ni op d'Swap dofir vertrauen.

Zum Beispill wäert de folgende Block d'Zuel vun de simultane Clienten op 30 beschränken. Wa méi Clienten den Host schloen, kënnen se e Verspéidung oder e momentanen Ausfall erliewen, deen einfach duerch d'Erfrëschung vum Browser geléist ka ginn. Och wann dëst als onerwënscht ugesi ka ginn, ass et méi gesond fir de Server an op laang Siicht, och am Beschten fir Är Site.

Dir kënnt dëse Block an /etc/httpd/conf/httpd.conf oder /etc/apache2/apache2.conf placéieren, ofhängeg ob Dir CentOS oder Debian benotzt.

Notéiert w.e.g. datt dee selwechte Prinzip fir all MPMs gëlt - ech benotzen den Event hei fir mam Konzept weiderzemaachen, dat am virege Tipp beschriwwe gëtt:

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

Op alle Fall ass et héich recommandéiert datt Dir op d'Apache 2.4 Dokumenter kuckt fir ze kucken wéi eng Direktiven fir Äre gewielte MPM erlaabt sinn.

TIP #5: Wësst Är Uwendungen

Als Fauschtregel sollt Dir keng Apache Moduler lueden déi net strikt néideg sinn fir datt Är Applikatioun funktionnéiert. Dëst erfuerdert op d'mannst e Gesamtkenntnisser vun den Uwendungen déi op Ärem Server lafen, besonnesch wann Dir e Systemadministrator sidd an et ass en anert Team fir d'Entwécklung verantwortlech.

Dir kënnt déi aktuell gelueden Moduler mat:

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

Fir Moduler an CentOS auszeschalten/auszeschalten, musst Dir d'Linn kommentéieren déi mam LoadModule ufänkt (entweder an der Haaptkonfiguratiounsdatei oder an engem Auxiliary bannen /etc/httpd/conf.modules.d.

Op der anerer Säit bitt Debian en Tool genannt a2dismod fir Moduler auszeschalten a gëtt wéi follegt benotzt:

# a2dismod module_name

Fir et zréck z'aktivéieren:

# a2enmod module_name

An all Fall, erënnert un Apache nei ze starten fir datt d'Ännerungen a Kraaft trieden.

Resumé

An dësem Artikel hu mir 5 Tipps iwwerpréift, déi Iech hëllefen den Apache Webserver ofzestëmmen a seng Leeschtung ze erhéijen. Zousätzlech sollt Dir drun erënneren datt d'Optimiséierung an d'Performance ouni Sécherheet sënnlos ass, also wëllt Dir och op den Apache Harding Tipps Artikel op linux-console.net referenzéieren.

Well mir net all Aspekter vun dësem Thema an dësem Artikel adequat ofdecken, vläicht denkt Dir un aner Iddien, déi Dir gäre mat dem Rescht vun der Gemeinschaft deele wëllt. Wann jo, fille sech frei fir eis matzedeelen andeems Dir de Kommentarformular hei drënner benotzt.