• Digitální příslušenství
  • Server
  • Digitální život
  • Zásady ochrany osobních údajů
  • Kontaktujte nás
  1. Domov
  2. Článek
  3. Jak optimalizovat výkon webového serveru Apache

Jak optimalizovat výkon webového serveru Apache

Rsdaa 03/01/2022 1753

Stav: Zastaráno

Tento článek pojednává o verzi Ubuntu, která již není podporována. Pokud aktuálně provozujete server se systémem Ubuntu 12.04, důrazně doporučujeme upgradovat nebo migrovat na podporovanou verzi Ubuntu:

Důvod: Ubuntu 12.04 dosáhlo konce životnosti (EOL) 28. dubna 2017 a již nedostává bezpečnostní záplaty ani aktualizace. Tato příručka již není udržována.

Viz místo toho:Tato příručka může být stále užitečná jako reference, ale nemusí fungovat v jiných verzích Ubuntu. Pokud je k dispozici, důrazně doporučujeme použít příručku napsanou pro verzi Ubuntu, kterou používáte. Chcete-li najít novější verzi, můžete použít funkci vyhledávání v horní části stránky.

Úvod

Apache je úžasně výkonný a schopný webový server. Aby bylo počáteční nastavení co nejjednodušší, je dodáván s mnoha předinstalovanými moduly. Díky tomu je skvělou volbou pro nové projekty, kdy potřebujete být rychle produktivní. Jak se však vaše stránky rozrůstají, můžete začít narážet na problémy s výkonem.

Na DigitalOcean mě jako první zaujaly nízké náklady na začátek. Nejmenší a nejlevnější kapky mají 512 MB RAM, což se v dnešním světě velkých frameworků nezdá moc. Byli byste však překvapeni, co můžete s malým serverem, jako je tento, dělat, pokud věnujete trochu času vyladění nastavení.

Pokud používáte Apache na jedné z menších velikostí kapiček nebo pokud chcete maximalizovat svůj výkon na větších kapičkách, měli byste udělat několik věcí. V příkladech budu používat Ubuntu 12.04, ale principy, které demonstruji, jsou použitelné i na jiné verze Linuxu.

Uvolněte nepotřebné moduly

V systémech založených na Ubuntu a Debianu uvidíte složku s názvem /etc/apache2/mods-enabled a složku s názvem /etc/apache2/mods-available/. Složka mods-available je seznam všech modulů nainstalovaných na konkrétním serveru a mods-enabled jsou moduly, které jsou aktuálně aktivní.

Na mém VPS mám ve výchozím nastavení aktivních 17 modulů. To je příliš mnoho a většina z nich není pro mou aplikaci potřebná. Bohužel moduly, které potřebujete, nemusí být přesně jasné, protože některé jsou závislé na jiných.

Doporučuji vytvořit seznam všech aktuálně aktivních modulů a uložit jej pro budoucí použití pro případ, že byste se potřebovali vrátit zpět. Poté jednoduše deaktivujte moduly jeden po druhém a po každé změně restartujte váš Apache, abyste zjistili, zda nedochází k chybám.

Na Ubuntu a Debianu deaktivujete modul pomocí příkazu (jako příklad použijte autoindex):

sudo a2dismod autoindex

Některé moduly, které jsou obzvláště náročné na zdroje a které byste měli deaktivovat, pokud je nepotřebujete, jsou:

PHPSSLRewritePerlPythonRack / Ruby / Passenger

Několik z těchto modulů není ve výchozím nastavení povoleno, takže je možná nemáte povolené a v některých případech jsou povoleny, protože je skutečně potřebujete.

Rychlá poznámka k „přepisování“: Tento modul je často povolen, když by modul „alias“ ve skutečnosti fungoval stejně dobře. Pokud si vystačíte s aliasem, vypněte přepis. Rewrite je jedním z náročnějších modulů, ale také propůjčuje Apache některé pozoruhodné schopnosti.

Přechod z „přepisování“ na „alias“ je pokročilé téma (s nějakou užitečnou dokumentací). I když však nemůžete přepis úplně vypnout, ale můžete převést některá svá pravidla přepisu na aliasy, získá výhodu.

Po deaktivaci modulu a opětovném načtení konfigurace Apache můžete zkontrolovat zprávy v protokolu chyb Apache. V Ubuntu a Debianu zkontrolujte /var/log/apache2/error.log.

Zobrazila se mi chyba, která vypadá takto:

Chyba syntaxe na řádku 6 /etc/apache2/sites-enabled/site1:Neplatný příkaz 'DAVLockDB', možná chybně napsaný nebo definovaný modulem, který není zahrnut v konfiguraci serveruAkce 'configtest' se nezdařila.

To znamená, že modul I bylo potřeba pouze deaktivovat. V tomto případě byl modul dav_fs, takže jsem jej znovu povolil pomocí:

sudo a2enmod dav_fs

Potom jsem restartoval Apache a hledal další chybu. Může trvat několik pokusů, než získáte minimální seznam. Buďte trpěliví, stojí to za to.

Přesun kódu z Apache

Pokud provozujete stránky PHP, je velká šance, že používáte slavný mod_php. Pokud provozujete rubínový web, snadným řešením je Passenger Phusion, neboli mod_rails nebo mod_rack.

Problém s tím je, že kód C pro interpret pro daný jazyk je vnořen do Apache, čímž se při každém zobrazení stránky využívá více paměti. Pokud oblíbená stránka na vašem webu způsobí 30 požadavků HTTP, jeden z nich bude pro dynamickou stránku a dalších 29 pravděpodobně pro statické zdroje, jako jsou obrázky, css a javascript. Proč používat nafouklý Apache pro těch 29 požadavků, které neposkytují žádný dynamický obsah?

Rozdíl může být dramatický. Povolení mod_php může způsobit využití více než 100 MB RAM na podřízený proces Apache! Vzhledem k tomu, že ve výchozím nastavení může mít váš server Apache 25 nebo více procesů spuštěných, můžete vidět, proč se to může stát problémem.

Zde je několik nástrojů, které k tomu můžete použít:

Nevýhodou této změny je, že zpočátku je obtížnější uvést věci do chodu. V některých případech je dokumentace velmi dobrá. V ostatních případech kašel php-fpm kašel dokumentace je řídká.

Obecně se stane, že se spustí speciální serverový proces pro PHP nebo Python nebo Ruby, a pak Apache, místo aby instinktivně věděl, jak se s těmito požadavky vypořádat prostřednictvím vloženého kódu, pouze předá volání dynamického obsahu tomuto backendovému procesu.

Budete překvapeni, jak velký rozdíl to znamená. Po odstranění mod_php z mého virtuálního serveru se velikost mých procesů Apache zvýšila z 90-120 MB na méně než 10 MB. Byl jsem schopen obsluhovat veškerý svůj dynamický obsah pouze pomocí dvou backendových procesů php, z nichž každý využíval pouze 60 MB.

Omezit počet procesů Apache a dětí

Většina výchozích konfigurací Apache operačních systémů není vhodná pro menší servery – 25 a více podřízených procesů je běžné. Pokud každý z vašich podřízených procesů Apache používá 120 MB RAM, pak by vaše VPS potřebovalo 3 GB pouze pro Apache.

Webový prohlížeč jednoho návštěvníka si může z webu vyžádat 4 položky najednou, takže když se stránku pokouší načíst pouze 7 nebo 8 lidí současně, může dojít k přetížení vašeho cloudového serveru. To způsobí, že webová stránka bude viset ve stavu neustálého načítání po dobu, která se zdá být věčnost.

Často se stává, že server ponechá tyto mrtvé procesy Apache aktivní a bude se snažit obsluhovat obsah dlouho poté, co to uživatel vzdal, což snižuje počet procesů dostupných pro obsluhu uživatelů a snižuje množství dostupné systémové paměti RAM. To způsobuje to, co je běžně známé jako sestupná spirála, která končí špatnou zkušeností jak pro vás, tak pro návštěvníky vašeho webu.

Co byste měli udělat, je zjistit, kolik RAM vaše aplikace potřebuje, a pak zjistit, kolik zbývá, a přidělit většinu z toho Apache.

Pokud máte například tři procesy php-fpm zpracovávající dynamický obsah a každý může využívat až 70 MB paměti RAM a váš server MySQL může využívat až 120 MB paměti RAM, což dohromady představuje 330 MB využitých aplikace. To vám umožní přidělit asi 150 MB Apache.

Za běhu Apache otevřete na serveru příkaz top. Vložím trochu toho, co byste viděli, a oříznu většinu řádků, které nejsou relevantní:

top -bn 1PID USERPRNIVIRTRESSHR S %CPU %MEMTIME+COMMAND[...]15015 www-data20 0232m 9644 1900 S0.01.6 0:00.02 apache215016 www-data20 0241190064.0232m ap 90064. 15017 www-data20 0232m 9644 1900 S0.01.6 0:00.02 apache2

Všimněte si sloupce RES pro podřízený proces Apache a poznamenejte si jeho hodnotu RES. Například na mém virtuálním serveru, který byl dobře optimalizován, je hodnota 9 644, což znamená, že používá necelých 10 MB RAM. Pokud omezím Apache na maximálně 15 podřízených procesů, pak by to mělo být maximálně 150 MB RAM.

Upravte konfigurační soubor apache vašeho cloudového serveru, což je v Ubuntu a Debianu /etc/apache2/apache2.conf, a vyhledejte sekci pro konfiguraci mpmpreforkmodule. Vyhledejte řádek MaxClients a nastavte jej na 15, poté uložte a restartujte Apache.

Zde je příklad toho, co budete v Ubuntu hledat:

StartServers3MinSpareServers 3MaxSpareServers 5MaxClients 30MaxRequestsPerChild 0

Vidíte tam řádek MaxClients? Musíme tuto hodnotu změnit na nižší číslo.

Pokud se vaše VPS přetíží a dosáhne maximálního počtu klientů, které může obsloužit najednou, obslouží je a ostatní uživatelé jednoduše rychle selžou. Poté mohou stránku znovu načíst a na druhý pokus mohou mít větší úspěch.

To zní špatně, ale věřte mi, že je mnohem lepší tato spojení rychle uzavřít, ale ponechat server ve zdravém stavu, než viset otevřený na věčnost. Překvapivě můžete získat lepší výkon ze serveru, který má méně podřízených procesů, ale reaguje rychleji, než kdybyste měli server s více podřízenými procesy, které není schopen zpracovat.

Příkladem je, že web ve Wordpressu, který spravuji, je hostován na 1GB dropletu pomocí 4 procesů php-fpm a je schopen obsluhovat více než 950 současných uživatelů najednou. To znamená maximální kapacitu asi 42 milionů zobrazení stránek za den, pokud by se tato webová stránka někdy stala dostatečně populární!

Zvažte alternativní konfiguraci MPM

Většina konfigurací Apache historicky používala prefork mpm, který je bezpečný pro vlákna, a proto je vhodný pro použití s ​​PHP a dalšími vestavěnými jazyky.

Pokud se zbavíte externích modulů, jako je PHP nebo Rails, můžete zvážit pracovní MPM, které je často rychlejší než prefork.

Chcete-li povolit pracovní modul, musíte jej nainstalovat.

sudo apt-get install apache2-mpm-worker

Který vám zobrazí zprávu jako je tato:

Následující balíčky budou ODSTRANĚNY:apache2-mpm-prefork libapache2-mod-php5 Budou nainstalovány následující NOVÉ balíčky:apache2-mpm-worker0 upgradován, 1 nově nainstalován, 2 k odstranění a 2 neupgradovány. Potřebujete získat 2 284 B archivů .Po této operaci se uvolní 8 718 kB místa na disku. Chcete pokračovat [A/n]?

Dejte si pozor, na Ubuntu, pokud nainstalujete worker mpm, odinstaluje se prefork mpm a odinstaluje se mod_php a další nekompatibilní přídavné moduly.

Zde jsme diskutovali o čtyřech optimalizacích, které můžete provést na Apache a které by měly výrazně zvýšit výkon vaší aplikace, i když máte malou kapičku.

Důrazně doporučuji vyzkoušet to na testovacím dropletu, nikoli na produkčním serveru. Krása služby DigitalOcean spočívá v tom, že můžete roztočit novou kapku přesně na dobu, kterou potřebujete k otestování změn, a po dokončení ji vypnout. S hodinovou fakturací je to nízkorizikový a levný způsob, jak najít perfektní konfiguraci pro váš VPS.

Vložil: Matthew Nuzum

PREV: Jaké jsou výhody a nevýhody virtualizace?

NEXT: 6 hlavních výhod virtualizace serverů – HiTechNectar

Populární články

Žhavé články

Navigační seznamy

Zpět na začátek