6.1 Optimalizace výkonu

Optimalizovat výkon WWW serveru budete potřebovat jen u velmi vytížených WWW serverů. Implicitní konfigurace a kompilace by měla vyhovovat většině nasazení WWW Serveru. Přesto je dobré dodržovat několik zásad, které mohou běh WWW serveru optimalizovat. Optimalizace může probíhat na třech úrovních:

  • Operační systém
  • Kompilace WWW serveru
  • Konfigurace WWW serveru

V tomto textu se seznámíme pouze s některými pravidly. Pro podrobnější informace je vhodné nahlédnout do http://httpd.apache.org/docs-2.0/misc/perf-tuning.html.

Následující direktivy konfigurace mohou ovlivnit výkon WWW serveru:

  • AllowOverride
  • DirectoryIndex
  • HostnameLookups
  • EnableMMAP
  • EnableSendfile
  • KeepAliveTimeout
  • MaxSpareServers
  • MinSpareServers
  • Options
  • StartServers

Úvod

Direktiva AllowOverride, která umožňuje využívat soubory .htaccess umístěné v adresářích pro dodatečnou (uživatelskou) konfiguraci nutí (pokud není nastavena na None), při každém dotazu klienta, www server načítat soubor .htaccess a přizpůsobit mu chování serveru. Tato činnost zpomaluje běh WWW serveru.

AllowOverride

Direktiva DirectoryIndex může být nastavena obecně pro všechny soubory dle nějaké masky. Např. DirectoryIndex index, která bude jako rejstříky zobrazovat všechny soubory jménem index bez ohledu na příponu. Naneštěstí i tato operace zpomaluje běh serveru. Daleko vhodnější je explicitně uvést seznam všech možných rejstříků. Na druhou stranu se tak zbavujeme možností vyjednávání o obsahu.

DirectoryIndex

Direktiva Options s parametry FollowSymLinks a FollowSymLinksIfOwnerMatch vynucuje spouštění dalších příkazů OS a tím zpomaluje běh WWW serveru. Proto pokud to není nezbytně nutné je vhodnější symbolické linky v případě WWW serveru nevyužívat.

Options FollowSymLinks FollowSymLinksIfOwnerMatch

Direktiva HostnameLookups umožňuje nastavit překlad IP adresy v reálném čase. V Log souboru se pak místo IP objevuje jméno počítače (pokud bylo zjistitelné). To je sice pěkné, ale v reálném provozu to znamená neustálé dotazování DNS serveru na překlad IP na jméno. Podobně je to v případě direktiv Allow from a Denny from. Proto raději za všech okolností volte IP místo jména a nepovolujte HostnameLookups. Překlad IP adres na jména v LogSouboru můžete provést dodatečně s využitím programu logresolve (kompiluje se implicitně s Apache).

HostnameLookups
Denny from *
Allow from *

Direktiva KeepAliveTimeout udává jaká je maximální doba po kterou může jeden proces apache zpracovávat jeden požadavek od klienta. Tato direktiva je velmi problematická. V případě, že její hodnotu nastavíte na relativně vysokou, můžete výrazně zatížit server např. v okamžiku, kdy uživatel požádá o zpracování nějakého skriptu ve kterém je chyba (a dojde např. zacyklení a zabrání procesoru na 100%). Toto zatížení pak bude trvat tak dlouho jak dlouhý je Timeout. V případě více klientů, kteří takto požádají o chybný skript, může dojít k úplnému zahlcení serveru a pro další klienty se server chová jako nedostupný.

Na druhou stranu, pokud hodnotu nastavíte na příliš nízkou, nemusí se v daném limitu podařit vyřídit požadavek, a klient obdrží zprávu Timeout.

KeepAliveTimeout

Velmi důležitá je konfigurace počtu běžících pocesů Apache a s tím související direktivy. Následující konfigurace se této problematice věnuje.

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
MaxClients       150
MaxRequestsPerChild  1000
</IfModule>

V konfiguračním souboru se můžete setkat s několika sekcemi, které se této části konfigurace věnují. Vždy se však uplatňuje jen jedna z nich. Výše uvedená se opírá o modul prefork.c. Tento modul se uplatňuje na OS Linux/Unix. Na MS Windows se uplatňuje sekce mpm_winnt.c.

Direktiva StartServers udává kolik se má po startu Apache do paměti počítače načíst (spustit) procesů apache.
Direktiva MaxClients udává kolik maximálně je možné spustit procesů Apache
Direktiva MaxRequestsPerChild udává kolik požadavků může maximálně zpracovat v jednom okamžiku jeden proces Apache
Direktiva MinSpareServers udává minimálně kolik procesů Apache má být v paměti k dispozici v nečinném stavu. Zavedení procesu do paměti představuje určitou zátěž serveru (a hlavně chvíli trvá) a toto číslo udává jakýsi buffer procesů, které je možné ihned bez zavádění využít. Direktiva MaxSpareServers je horní hranicí bufferu nečinných procesů apache.

StartServers, MinSpareServers, MaxSpareServers, MaxClients, MaxRequestsPerChild

 

SAMOSTATNÝ ÚKOL 18

 

Pokuste si sepsat na čem všem závisí rychlost zpracování požadavku klienta a co vám tedy může ovlivnit Timeout.

Timeout