Výklad chyby "Chyba 503 - Service temporarily unavailable"

Popis situace, kdy dojde k vyčerpání systémových prostředků pro běh PHP skriptů daného webu.


Pokud se setkáváte u vašeho webu s chybou "503 Service Temporarily Unavailable", většinou to znamená problém s vytěžováním serveru vašimi PHP skripty.

Každý webhosting má na serveru rezervováno 5 PHP procesů, které mohou běžet paralelně. To znamená, že v jeden okamžik může být zpracováváno nejvýše 5 požadavků na vykonání PHP skriptu jednoho webu. Avšak to neznamená, že by další požadavky byly odmítány - zařadí se do fronty a počkají, až se na ně dostane. Za normálních okolností je 5 PHP procesů zcela dostatečných - máte-li správně optimalizované stránky a používáte cachování, na tento problém nenarazíte.

Může se stát, že další požadavky se volného PHP procesu v nějakém timeoutu nedočkají. Což znamená, že všech 5 PHP procesů něco velmi dlouho dělá. Pak jsou čekající požadavky po nějaké době odmítnuty s chybou 503.

Příčiny problému a řešení

Podstata problému je taková, že PHP skripty na vašem webu nestíhají odbavovat požadavky - buď proto, že je toho na ně moc
(příliš vytížený web), nebo proto, že z nějakého důvodu na něco dlouho čekají.

Pokud jste programátor, pokuste se zjistit, čím vaše PHP skripty tráví nejvíce času (na jaké akci jsou zablokované)

Většinovou a naprosto největší brzdou je obvykle databáze. Stačí jeden špatně nastavený index a rychlost je řádově nižší.

Možné příčiny a jejich řešení:

  1. Nesprávně optimalizovaná PHP aplikace. Vaše aplikace není přizpůsobena pro velký počet požadavků. Zjistěte, zda vámi používaný redakční systém umožňuje tzv. cachování. Pokud ano, zapněte jej. Výrazně to zkrátí dobu provádění skriptu, často to radikálně sníží počet prováděných SQL dotazů do databáze a výrazně celkově urychlí vaše stránky - viz. např. cachování ve WordPressu.
     
  2. Příliš mnoho záznamů v databázi - typickým problémem je, že si aplikace zaznamenává všechny přístupy návštěvníků či nějaké podobné rozsáhlé statistiky do databáze, což je zcela nevhodné, databázi to velmi zatěžuje a vaše stránky postupem času výrazně zpomaluje.
     
  3. Nevhodné databázové tabulky, nesprávné či chybějící databázové indexy - PHP pak velmi dlouho čeká na výsledky SQL dotazů (viz. MySQL - optimalizace výkonu, indexy).
     
  4. PHP aplikace se připojuje k externímu zdroji, který je nedostupný - např. když na stránky stahujete externí data přes RSS, SOAP apod., ale s cílovým serverem se není možné spojit nebo neodpovídá či je přetížený - pak čeká i váš PHP skript
     
  5. Download souborů zprostředkovaný přes PHP skript - pokud vašim návštěvníkům nabídnete download nějakých velkých souborů tak, že je odkážete na PHP skript, který čte obsah soubru a posílá jej na výstup (např. funkcemi readfile() nebo file_get_contents()), pak tím na dobu stahování obsadíte tento PHP proces. Pokud tedy bude něco stahovat 5 lidí v jednom okamžiku, již není žádný volný PHP proces. Download řešte odkázáním nebo přesměrováním na přímou URL adersu daného souboru tak, aby download nešel skrz PHP skript.

Řešením této situace může být také přechod na vyšší variantu webhostingu Neomezený limit Extra - ten mimo jiné nabízí 10 PHP procesů, tedy vyšší výkon.

Avšak pozor na to, že tato vyšší varianta neurychlí vaše skripty, tedy nezkrátí čas vykonávání vašeho PHP skriptu. Pouze umožní, aby bylo v jeden okamžik vašich skriptů vykonáváno více zároveň (paralelně) a navýší paměť, přidělenou skriptům. Pokud je problém v tom, že doba běhu vaše skriptu je příliš dlouhá (např. v řádu sekund), je potřeba zejména aplikaci zoptimalizovat.

**) v příplatkové verzi Neomezený limit Extra - získáte vyšší výkon, větší MySQL (až 2GB) a e-maily (10GB), denní zálohování s historií 5 dní a obnovou zdarma, výkonnější PHP, apod.)