Zahájit spolupráci
Příklad z praxe

Jak dlouhé PHP procesy způsobily výpadek e-shopu

E-shopu nejdřív přestal fungovat košík, pak celý web. Vypadalo to jako klasický nápor návštěvnosti od reklamních kampaní, jenže skutečná příčina byla jinde – ve způsobu, jakým web zpracovává URL s marketingovými parametry.

Výchozí situace

Nejdřív přestal fungovat košík, následně celý e-shop. Server byl restartován, po chvíli web naběhl, ale znovu spadl. Cílem bylo web zprovoznit, najít skutečnou příčinu a navrhnout další opatření, pokud budou potřeba.

info

Klient provozuje e-shop na WordPressu (WooCommerce) s pravidelnými marketingovými kampaněmi, které přivádí návštěvnost přes reklamní odkazy s trackovacími parametry.

Cíle a výzvy

Obnovit funkčnost e-shopu – košík i celý web

Najít skutečnou příčinu opakovaného výpadku

Ověřit, jestli šlo o nápor návštěvnosti, nebo o něco jiného

Navrhnout opatření proti opakování problému

Výsledky

92%

Pokles zátěže CPU po zásahu

3

Úpravy nastavení serveru a cache

1

Zásah k trvalému vyřešení

Jak jsme postupovali

Co jsme zjistili

Podpora hostingu našla dlouho běžící požadavky na hlavní vstupní skript webu. Šlo o požadavky obsahující marketingové parametry (např. utm_source, gclid, fbclid a podobné) – některé běžely přibližně 1400 až 1600 sekund. Server vykazoval problematický stav a vytížení CPU až 100 %.

Podle podpory dlouho běžící PHP procesy spotřebovávaly serverové prostředky, a URL s query parametry navíc mohou obcházet cache, takže je web musí zpracovat přes PHP a databázi místo rychlejší cachované odpovědi. Samotné kampaně s trackovacími parametry přitom neměly být důvodem, proč by tak výkonný server spadl – problém byl spíš v tom, že některé procesy běžely extrémně dlouho. V logu chyb se objevila i upozornění vázaná na plugin Toret Zásilkovna a na jeden další, klientský plugin, ale nepotvrdilo se, že by šlo o jednoznačnou příčinu výpadku.

Jak jsme postupovali

Nejdřív jsme ve spolupráci s podporou hostingu restartovali server a služby a ověřili, že fungují stránky i přidání do košíku. Konzultovali jsme dlouhé požadavky s marketingovými parametry a upravili nastavení cache tak, aby dokázala cachovat i požadavky s query parametry – klienta jsme upozornili, že je po této změně potřeba sledovat případný dopad na kampaně a remarketing.

Zkontrolovali jsme nastavení serveru, logy a naplánované úlohy, snížili jsme paměťový limit a maximální dobu zpracování požadavku na rozumnější hodnoty a upravili limity databázového připojení. Zapnuli jsme podrobnější logování pro další sledování a přidali pravidlo proti neověřeným botům.

  • Restart serveru a služeb ve spolupráci s podporou hostingu
  • Ověření, že po restartu fungují stránky i přidání do košíku
  • Konzultace ohledně dlouhých požadavků s marketingovými parametry
  • Nastavení cache tak, aby cachovala i požadavky s query parametry
  • Upozornění na nutnost sledovat dopad této změny na kampaně a remarketing
  • Kontrola nastavení serveru, logů a naplánovaných úloh
  • Snížení paměťového limitu a maximální doby zpracování požadavku
  • Úprava limitů databázového připojení
  • Zapnutí podrobnějšího logování pro další sledování
  • Přidání pravidla proti neověřeným botům

Sledovali jsme vytížení CPU postupně po každé úpravě, abychom viděli, která změna má skutečný dopad.

Výsledek zásahu

Web po zásahu fungoval – košík i běžné stránky byly znovu funkční. Server se podle monitoringu přestal tolik zatěžovat. Stejný konkrétní problém (dlouho běžící procesy u URL s marketingovými parametry) se od zásahu znovu neobjevil, i když web měl později ještě jiná zpomalení s jinou, nesouvisející příčinou. Náš interní tiket nedokládá jednoznačné odstranění konkrétní chyby v pluginu, šabloně, databázi nebo externím API – šlo především o omezení dopadu přes nastavení serveru a cache.

Praktické detaily

Běžné reklamní parametry v URL nejsou samy o sobě problém. V tomto případě ale mohly obcházet cache, takže je web musel zpracovat přes PHP a databázi – a pokud takový proces běží extrémně dlouho, dokáže zatížit server podobně jako reálný nápor návštěvnosti.

Klíčové bylo porovnat několik věcí najednou:

  • Skutečnou návštěvnost webu v době výpadku
  • Dobu běhu jednotlivých PHP procesů
  • Nastavení cache u URL s query parametry
  • Vytížení CPU podle monitoringu serveru

Poučení a nová zjištění

U e-shopu je potřeba sledovat nejen návštěvnost, ale i to, jak web zpracovává URL s parametry. Dlouho běžící PHP proces u zdánlivě neškodného reklamního odkazu dokáže zatížit server stejně jako reálný nápor návštěvnosti.

Než se výpadek vyhodnotí jako „nápor návštěvnosti“, vyplatí se ověřit, jestli nejde o technický problém ve zpracování konkrétního typu požadavků.

Symbol WP-admin.cz

Připravil tým WP-admin.cz

Vyřešíme váš problém s WordPressem

Zaujal vás náš článek? Pomozte někomu a podělte se:

Máme volnou kapacitu

Nejste si jistí, kde začít? Pojďme se spojit!

Projdeme s vámi aktuální stav vašeho webu a navrhneme další postup.

Domluvit nezávaznou konzultaci

Nezávazná 20 min. technická konzultace