5 tipp az Apache webszerver teljesítményének növeléséhez
A Netcraft (egy jól ismert internetes cég, amely többek között webböngészőhasználati statisztikákkal is foglalkozik) legutóbbi jelentése szerint az Apache továbbra is a legszélesebb körben használt webszerver a webhelyek és az internetre néző számítógépek között.
Ezenkívül az Apache továbbra is a legnagyobb növekedést tapasztalja a legnépszerűbb webszerverek között, ezt követi az Nginx és az IIS. Így, ha Ön az Apache-telepítések kezeléséért felelős rendszergazda, akkor tudnia kell, hogyan biztosíthatja, hogy webszervere az Ön (vagy ügyfele) igényeinek megfelelően a lehető legjobban teljesítsen.
Ebben a cikkben megvitatunk néhány tippet, amelyek segítenek abban, hogy az Apache zökkenőmentesen működjön, és képes legyen kezelni a távoli ügyfelektől várt kérések számát.
Ne feledje azonban, hogy az Apache-ot nem azzal a céllal tervezték, hogy benchmark rekordokat állítson fel – de ennek ellenére is képes nagy teljesítményt nyújtani szinte bármilyen felhasználási esetben, amelyre csak gondolhat.
1. TIPP: Mindig frissítse az Apache-t a legújabb verzióra
Mondanunk sem kell, hogy az Apache legújabb verziójának telepítése valószínűleg az egyik első dolog, amit figyelembe kell vennie. 2015. november 19-től a CentOS 7 tárolókban elérhető Apache legújabb verziója a 2.4.6, míg a Debianban a >2.4.10.
Előfordulhat azonban, hogy a közelmúltban fejlesztés vagy hibajavítás került egy újonnan kiadott stabil verzióhoz, amely ezután elérhetővé válik a forrásból való letöltéshez és telepítéshez. Itt találhatóak a fordítási és telepítési utasítások is – ne feledje, hogy ha ezt a frissítési módot választja, elővigyázatosságból érdemes biztonsági másolatot készíteni az aktuális konfigurációs fájlokról/webhelyekről/virtuális gazdagépekről.
Mindenesetre az alábbiak szerint ellenőrizheti az aktuálisan telepített verziót:
httpd -v [On RedHat/CentOS based systems]
apache2 –v [On Debian/Ubuntu based systems]
Ökölszabályként tartsa be a választott disztribúció csomagkezelője által biztosított frissítési módszert (yum update httpd
vagy aptitude safe-upgrade apache2
CentOS vagy Debian esetén, illetve) hacsak nincs más mód. A legújabb kiadási megjegyzéseket az Apache HTTP Server Project webhely Apache dokumentációja részében olvashatja.
TIPP #2: Ha 2.4-nél régebbi kernelt használ, fontolja meg a frissítést most
Miért? A 2.4 és újabb kernelverziókban alapértelmezés szerint engedélyezve van a sendfile kernel rendszerhívás. Ez viszont megkönnyíti a nagy teljesítményű hálózati fájlátvitelt (amelyek a webszerver-kliens kommunikációval összefüggésben kívánatosak), és lehetővé teszi az Apache számára, hogy statikus tartalmat gyorsabban és alacsonyabb CPU-kihasználással szállítson az egyidejű olvasási és küldési műveletek végrehajtásával.
A jelenleg telepített kernelt a következővel tekintheti meg:
uname -r
és hasonlítsa össze a www.kernel.org legfrissebb stabil kernellel (4.3 az írás idején).
Bár ez egy nem kezdőknek szánt folyamat, a kernel frissítése érdekes gyakorlat, amellyel többet megtudhatunk a Linux belső tulajdonságairól.
3. TIPP: Válassza ki azt a Multi-Processing Module-t (MPM), amely a legjobban megfelel az Ön esetének
A gyakorlatban az MPM-ek kiterjesztik az Apache moduláris funkcionalitását azáltal, hogy lehetővé teszik, hogy eldöntse, hogyan konfigurálja a webszervert úgy, hogy kapcsolódjon a gép hálózati portjaihoz, fogadja el az ügyfelektől érkező kéréseket, és használjon gyermekfolyamatokat (és szálakat, vagy) az ilyen kérések kezelésére.
A 2.4-es verziótól kezdve az Apache három különböző MPM közül választhat, az Ön igényeitől függően:
- A
prefork
MPM több gyermekfolyamatot használ szálfűzés nélkül. Minden folyamat egyszerre egy kapcsolatot kezel anélkül, hogy mindegyikhez külön szálat hozna létre. Anélkül, hogy túlságosan belemennénk a részletekbe, azt mondhatjuk, hogy ezt az MPM-et csak olyan alkalmazás hibakeresése során kívánja használni, amely nem szálbiztos modulokat használ, vagy ha az alkalmazásnak foglalkoznia kell nem szálbiztos modulokkal, mint például a mod_php. - A
worker
MPM több szálat használ gyermekfolyamatonként, ahol minden szál egyszerre egy kapcsolatot kezel. Ez jó választás nagy forgalmú szerverek számára, mivel lehetővé teszi több párhuzamos kapcsolat kezelését kevesebb RAM-mal, mint az előző esetben. - Végül az
event
MPM az alapértelmezett MPM a legtöbb Apache-telepítésben a 2.4-es és újabb verziókhoz. Hasonló a dolgozó MPM-hez, mivel több szálat is hoz létre gyermekfolyamatonként, de van egy előnye: KeepAlive vagy idle kapcsolatokat okoz (amíg ezek ebben az állapotban maradnak). hogy egyetlen szál kezelje, így felszabadul a memória, amely más szálakhoz is lefoglalható. Ez az MPM nem alkalmas nem szálbiztos modulokhoz, mint például a mod_php, amelyekhez helyette egy PHP-FPM-et kell használni.
Az Apache telepítése által használt MPM ellenőrzéséhez tegye a következőket:
httpd -V
Az alábbi képen látható, hogy ez a webszerver a prefork MPM-et használja.
Ennek megváltoztatásához szerkesztenie kell:
/etc/httpd/conf.modules.d/00-mpm.conf [On RedHat/CentOS based systems]
/etc/apache2/mods-available/<mpm>.load [On Debian/Ubuntu based systems]
Ahol az
és törölje a megjegyzést a kívánt modult betöltő sorból, így:
LoadModule mpm_event_module modules/mod_mpm_event.so
Megjegyzés: Ahhoz, hogy az esemény MPM működjön a Debianban, telepítenie kell a libapache2-mod-fastcgi csomagot a nem ingyenes csomagból. adattárak.
Ezenkívül a CentOS-hez szükség lesz a php-fpm-re (az fcgi és a mod_fcgid mellett), míg a Debianban php5-fpm< (az apache2-mpm-event elemmel együtt).
Végül, de nem utolsósorban indítsa újra a webszervert és az újonnan telepített php-fpm (vagy php5-fpm) szolgáltatást:
RedHat/CentOS rendszeren
systemctl restart httpd php-fpm && systemctl enable httpd php-fpm
Debian/Ubuntu alatt
systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm
Bár beállíthatja az Apache-t, hogy egy adott MPM-et használjon, ez a konfiguráció virtuális hosztonként felülírható, a korábban jelzett módon.
Csak dobja be a megfelelő címkéket minden egyes virtuális gazdagép konfigurációs fájljába, és máris készen áll – de győződjön meg arról, hogy egy és csak egy MPM-et használ vhosztonként.
Végül vegye figyelembe, hogy a választott disztribúciótól függetlenül a php-fpm a FastCGI megvalósítására támaszkodik, ezért javasoltam korábban a további csomagok telepítését.
További részletekért és példákért a php-fpmről, valamint arról, hogy az esemény MPM-mel együtt hogyan növelheti az Apache teljesítményét, tekintse meg a hivatalos dokumentációt.
Ezt látom, miután megváltoztattam az alapértelmezett MPM-et preforkról eseményre az előző képen látható mezőben:
A CentOS 7 rendszerben meg kell győződnie arról, hogy a http és a https szolgáltatások engedélyezve vannak a tűzfalon keresztül, és hogy a hálózati interfész(ek) ) megfelelően hozzáadva az alapértelmezett zónához.
Például:
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
Azért hozom fel ezt, mert nemrégiben olyan problémát tapasztaltam, amelyben a tűzfal alapértelmezett konfigurációs beállításai egy felhő VPS-ben megakadályozták a php-fpm és az Apache php-fájlok feldolgozását.
Alaptesztként (biztos vagyok benne, hogy bonyolultabbak vagy stresszesebbek is lehetnek) létrehozok egy php fájlt, amely ellenőrzi egy másik test.php
nevű fájl létezését két CentOS ugyanabban a könyvtárában. 7 szerver azonos hardverjellemzőkkel és terheléssel, de eltérő MPM-mel. Az egyik eseményt, a másik pedig a preforkot fogja használni:
Ez az a php-kód, amelyet egy checkiffileexists.php
nevű fájlba mentettem:
<?php
$filename = 'test.php';
if (file_exists($filename)) {
echo "The file $filename exists";
} else {
echo "The file $filename does not exist";
}
?>
Ezután az Apache benchmark eszközt (ab) futtatjuk 200 egyidejű kéréssel, amíg a 2000 kérelem be nem fejeződik:
ab -k -c 100 -n 2000 localhost/checkiffileexists.php
Futtassuk le a tesztet, és hasonlítsuk össze az eredményeket. Ügyeljen a teljesítménystatisztikákra:
Amint láthatja, az eseményt tartalmazó kiszolgáló teljesítménye ennek a tesztnek minden szempontból jobb, mint a prefork megfelelője.
TIPP #4: Okosan allokáljon RAM-ot az Apache számára
Talán a legkritikusabb hardverelem, amelyet figyelembe kell venni, az egyes Apache-folyamatokhoz lefoglalt RAM mennyisége. Bár ezt közvetlenül nem szabályozhatja, korlátozhatja az alárendelt folyamatok számát a MaxRequestWorkers direktívával (korábbi nevén MaxClients az Apache 2.2-ben), ami korlátozza az Apache RAM-használatát. Ismét beállíthatja ezt az értéket állomásonként vagy virtuális gazdagépenként.
Ehhez vegye figyelembe az Apache által használt RAM átlagos mennyiségét, majd szorozza meg aMaxRequestWorkersek számával, és ez lesz az Apache-folyamatok számára lefoglalt memória mennyisége. Egy dolog, amit soha nem akarsz, hogy a webszerver megtegye, az az, hogy elkezdi használni a swap-ot, mivel ez jelentősen csökkenti a teljesítményét. Ezért mindig tartsa az Apache RAM-használatát a megengedhető határokon belül, és soha ne hagyatkozzon a cserére.
Például a következő blokk 30ra korlátozza az egyidejű ügyfelek számát. Ha több kliens éri el a gazdagépet, késedelmet vagy pillanatnyi hibát tapasztalhatnak, amely könnyen megoldható a böngésző frissítésével. Bár ez nemkívánatosnak tekinthető, egészségesebb a szerver számára, és hosszú távon a legjobb az Ön webhelye számára is.
Ezt a blokkot elhelyezheti a /etc/httpd/conf/httpd.conf
vagy az /etc/apache2/apache2.conf
mappába, attól függően, hogy CentOS-t vagy Debiant használ.
Kérjük, vegye figyelembe, hogy ugyanaz az elv vonatkozik minden MPM-re – az eseményt itt használom, hogy folytassam az előző tippben felvázolt koncepciót:
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 30
MaxConnectionsPerChild 1000
</IfModule>
Mindenesetre erősen ajánlott, hogy tekintse át az Apache 2.4-es dokumentumokat, hogy megtudja, mely direktívák engedélyezettek a választott MPM-hez.
5. TIPP: Ismerje alkalmazásait
Alapszabály, hogy ne töltsön be olyan Apache-modulokat, amelyek nem feltétlenül szükségesek az alkalmazás működéséhez. Ehhez legalább általános ismerete szükséges a kiszolgálón futó alkalmazásokról, különösen, ha Ön rendszergazda, és egy másik csapat felelős a fejlesztésért.
A jelenleg betöltött modulokat listázhatja:
httpd -M [On RedHat/CentOS based systems]
apache2ctl -M [On Debian/Ubuntu based systems]
Modulok eltávolításához/letiltásához a CentOS rendszerben megjegyzésbe kell írnia a LoadModule kezdetű sort (akár a fő konfigurációs fájlban, akár a on belüli segédfájlban) /etc/httpd/conf.modules.d.
Másrészt a Debian egy a2dismod nevű eszközt biztosít a modulok letiltásához, és a következőképpen használható:
a2dismod module_name
A visszakapcsoláshoz:
a2enmod module_name
Mindkét esetben ne felejtse el újraindítani az Apache-t, hogy a változtatások érvénybe lépjenek.
Összegzés
Ebben a cikkben áttekintettünk 5 tippet, amelyek segítenek az Apache webszerver hangolásában és teljesítményének növelésében. Ezenkívül ne feledje, hogy az optimalizálás és a teljesítmény biztonság nélkül értelmetlen, ezért érdemes lehet hivatkozni a mod_pagespeed telepítésére a webszerver teljesítményének javítására és az Apache keményítési tippjeire a linux-console.net webhelyen.
Mivel ebben a cikkben nem tudjuk megfelelően lefedni ennek a témának az összes aspektusát, talán eszébe jutnak más ötletek, amelyeket meg szeretne osztani a közösség többi tagjával. Ha igen, nyugodtan tudassa velünk az alábbi megjegyzés űrlap segítségével.