it-swarm-eu.dev

Existuje nějaký způsob, jak diagnostikovat, které PHP nebo Perl skripty spotřebovávají nejvíce času CPU na produkčním serveru?

Na mírně nedostatečně napájeném serveru se občas zasáhne mnoho robotů, kteří procházejí současně. Zatímco jedním řešením je podívat se na házení většího výpočetního výkonu na webovém serveru, zdůraznilo se, že některé skripty jsou méně než úžasně optimalizované.

To, co bych rád zvládl, je spočítání času procesoru na základě žádosti a zaměření se na jejich stanovení. Je v Apache nebo PHP zabudováno něco, co by toho mohlo dosáhnout? Myslím, že by MySQL měla své vlastní metriky, které by identifikovaly i nejnáročnější dotazy na server?

7
Rowland Shaw

Můžete také profilovat PHP pomocí libovolného počtu profilerů. Upřednostňuji XDebug:

http://www.xdebug.org/docs/profiler

Nevyžaduje, abyste změnili žádný ze svých skriptů.

To by mělo rychle poukázat na úzká místa; Pomůže také s částí MySQL. I když má MySQL vlastní reportování, můžete být v situaci, kdy skript provede stejný (rychlý) dotaz 1000krát za sebou. MySQL by to nenahlásilo, ale z XDebug byste si všimli, že funkce byla mnohokrát nazývána pouze pro jednu stránku.

Můžete provést počáteční průzkum na dev serveru; všechny problémy s optimalizací se objeví rychle. Z produkčních protokolů zjistěte, které stránky jsou nejnavštěvovanější, a analyzujte je nejprve na dev serveru.

Pokud stále potřebujete provádět profilování na produkčním serveru, zvažte jeho náhodné povolení pro podmnožinu požadavků, abyste minimalizovali zatížení. Z dokumentů:

Můžete také selektivně povolit profiler s nastavením xdebug.profiler_enable_trigger nastaveným na 1. Pokud je nastaveno na 1, pak můžete povolit profiler pomocí proměnné GET/POST nebo COOKIE jména XDEBUG_PROFILE

Apache mod_rewrite pomůže při průhledném přidání proměnné GET, aniž by byla předána uživateli/od něj.

6
Erion

Existuje několik možných způsobů, jak toho dosáhnout - který způsob bude nejlepší, bude nakonec záviset na tom, kolik času a úsilí jste ochotni věnovat řešení.

PHP Benchmarking: Obecně vysoká implementace času a úsilí, pokud váš kód již nezahrnuje benchmarking. Přidejte úryvek kódu pro nastavení časových a mikrotimetrických časovačů na začátku každého skriptu a zaznamenejte celkový čas a mikrotimetr uplynulý na konci skriptu (spolu s volaným URI). Můžete přidat další časovače benchmarkingu pro konkrétní funkce, pokud budete muset později změnit svůj kód (nezapomeňte počkat, až po všechny běžné operace mají dokončeno, abyste mohli psát svá referenční data - v opačném případě budete zasahovat do srovnávacích informací).

Wget Benchmarking: Pravděpodobně nejjednodušší způsob, jak srovnávat. Získejte seznam požadovaných identifikátorů URI z protokolů webového serveru a vložte je do wgetu jako místní požadavky na webový server (v ideálním případě byste to udělali několikrát, zatímco provoz je velmi nízký, abyste získali reprezentativní výsledky)

2
danlefree