Weboldal keresés

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:

  1. 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.
  2. 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.
  3. 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 lehet mpm_event, mpm_worker vagy mpm_prefork.

é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.