Profilování php. Profilování a ladění PHP aplikací pomocí xhprof a FirePHP


Někdy může ViewProfile.swf a další systémové chyby SWF souviset s problémy registru Windows. Soubor ViewProfile.swf může používat několik programů, ale když jsou tyto programy odinstalovány nebo upraveny, někdy zůstanou „osiřelé“ (nesprávné) položky registru SWF.

V zásadě to znamená, že i když se skutečná cesta k souboru mohla změnit, jeho nesprávné dřívější umístění je stále zaznamenáno v registru Windows. Když se Windows pokouší vyhledat tyto soubory s nesprávným odkazem (umístění souboru ve vašem PC), dojde k chybě ViewProfile.swf. Položky registru související s Bioshock 2 mohly být navíc poškozeny škodlivým softwarem. Tyto poškozené položky registru SWF je proto třeba opravit, aby se problém vyřešil u kořene.

Pokud nejste servisní technik na počítače, nedoporučujeme pro odstranění neplatných ViewProfile.swf klíčů manuální úpravu registru Windows. Chyby při úpravách registru mohou způsobit nefunkčnost vašeho počítače a způsobit nenapravitelné poškození vašeho operačního systému. Ve skutečnosti i jedna čárka umístěná na nesprávném místě může zabránit spuštění počítače!

Kvůli riziku doporučujeme na vyčištění registru použít prověřený program, např. WinThruster (vyvinutý certifikovaným partnerem Microsoft Gold), abyste mohli prověřit a ověřit problémy s registrem související s ViewProfile.swf. Použití programu na vyčištění registru můžete automatizovat proces hledání poškozených položek registru, chybějících odkazů na soubory (jako např. ty, které způsobují chybu ViewProfile.swf) a poškozené odkazy registru. Před každým skenováním se automaticky vytvoří záložní kopie, která vám umožní vrátit zpět jakékoli změny jedním kliknutím a ochrání vás před možným poškozením vašeho počítače. Nejlepší na tom je, že odstranění chyb v registru může výrazně zvýšit rychlost a výkon systému.


Varování: Pokud nejste zkušený uživatel PC, NEDOPORUČUJEME ručně upravovat registr Windows. Nesprávné použití Editoru registru může způsobit vážné problémy, které mohou vyžadovat přeinstalaci systému Windows. Nezaručujeme, že problémy způsobené nesprávným použitím Editoru registru bude možné opravit. Editor registru používáte na vlastní nebezpečí.

Než budete registr Windows opravovat ručně, musíte si vytvořit zálohu tak, že exportujete část registru souvisejícího s ViewProfile.swf (např. Bioshock 2):

  1. Klikněte na tlačítko Začít.
  2. Zadejte " příkaz"V vyhledávací lišta... JEŠTĚ NEKLIKNĚTE ENTER!
  3. Při držení kláves CTRL-Shift na klávesnici stiskněte ENTER.
  4. Zobrazí se dialogové okno pro přístup.
  5. Klikněte Ano.
  6. Černé pole se otevře s blikajícím kurzorem.
  7. Zadejte " regedit“ a stiskněte ENTER.
  8. V Editoru registru vyberte klíč související s ViewProfile.swf (např. Bioshock 2), který chcete zálohovat.
  9. V nabídce Soubor vybrat Vývozní.
  10. Na seznamu Uložit do Vyberte složku, kam chcete uložit klíč k záloze Bioshock 2.
  11. V terénu Název souboru Zadejte název záložního souboru, například „Bioshock 2 backup“.
  12. Ujistěte se, že pole Exportní rozsah vybraná hodnota Vybraná větev.
  13. Klikněte Uložit.
  14. Soubor bude uložen s příponou .reg.
  15. Právě jste vytvořili zálohu položky registru souvisejícího s ViewProfile.swf.

Následující kroky pro ruční úpravu registru nebudou v tomto článku popsány, protože pravděpodobně poškodí váš systém. Pokud byste chtěli více informací o ruční úpravě registru, podívejte se prosím na níže uvedené odkazy.

Profilování aplikací je shromažďování údajů o rychlosti provádění různých částí programu (souborů a funkcí). Existuje mnoho dostupných profilovacích nástrojů PHP, ale ne všechny nástroje jsou vhodné pro provádění analýzy přímo na produkčním místě.

XHProf a jeho fork Tideways je pohodlný a jednoduchý profiler, který dokáže efektivně shromažďovat statistiky o provozu aplikace téměř bez snížení rychlosti vaší aplikace (nebo vašeho webu).

Proč profilový kód?

Pokud aplikace začne pracovat pomalu (čti „stránka se začala zpomalovat“), profilování vám umožní zjistit, která část je nejpomalejší. Výsledkem profilování je obvykle seznam provedených funkcí spolu s dobou jejich provedení.

Profilování kódu by mělo být na prvním místě v procesu optimalizace aplikace. Cokoli jiného by byly dohady a s největší pravděpodobností špatně. Musíte vědět, co přesně způsobuje problémy a „brzdí“.

Profilování je postup pro shromažďování a organizování statistik o době provádění kódu. Nejedná se o proces optimalizace nebo úpravy programu. Výsledkem tohoto procesu je obvykle rozšířená zpráva o programových komponentách a statistikách výkonu funkcí.

Přesně k tomu bylo vyvinuto řešení XHProf. Je navržen tak, aby fungoval na skutečných webových stránkách. Hlavní myšlenkou tohoto profilovače je vytvořit minimální zatížení aplikace a zároveň shromáždit všechna potřebná data o rychlosti provozu. Řešení vyvinuli specialisté z Facebooku.

Jak automaticky připojit php profiler?

Naši specialisté tvrdě pracovali a tento proces zcela zautomatizovali.
Stačí se přihlásit, v záložce „Domains“ vybrat požadovanou doménu, kliknout na ikonu „PHP.INI + PHP Profiler“ a zaškrtnout políčko „Domain Profiler“.

Aktivace této funkce může nějakou dobu trvat, obvykle ne více než 10 minut.

Pro php verze 5.2, 5.3, 5.4, 5.5, 5.6, 7.0 používáme profiler XHProf, pro php verze 7.1 a vyšší používáme profiler Tideways.

Po aktivaci bude na každé stránce vašeho webu zpracované pomocí PHP ve spodní části zabudován speciální blok s odkazy na soubor sestavy (odkaz bude vypadat takto:

Domain-name.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX&source=someapp)

A takto bude vypadat soubor zprávy:

Tabulka obsahuje seznam funkcí, které byly provedeny na jedné stránce, s dalšími informacemi:

  • Volání - počet a procento volání funkcí
  • Vč. Wall Time - doba provedení funkce s vnořenými funkcemi
  • Vyjma Wall Time - doba provádění funkce bez vnořených funkcí
  • Vč. CPU - čas procesoru s vnořenými funkcemi
  • Vyjma CPU - čas procesoru bez vnořených funkcí
  • Vč. MemUse - spotřeba paměti s vnořenými funkcemi
  • Vyjma MemUse - spotřeba paměti bez vnořených funkcí
  • Vč. PeakMemUse - maximální spotřeba paměti s vnořenými funkcemi
  • Vyjma PeakMemUse - maximální spotřeba paměti bez vnořených funkcí

Je třeba poznamenat, že zpráva vytvořená pomocí přílivových cest se může od této zprávy vizuálně mírně lišit, ale podstata se nemění.

Grafické zprávy


Části kódu náročné na zdroje jsou zvýrazněny žlutě (střední) a červeně (nejtěžší). Jedná se o ty části kódu, které ve srovnání se zbytkem programu využívají hodně zdrojů. Může to být jedna pomalá funkce nebo mnoho volání rychlé funkce. V našem příkladu vidíme, že funkce mysqli_multi_query() je označena červeně, protože běží nejpomaleji.

Souhrnné přehledy

Rozhraní XHProf také umožňuje zobrazit souhrnné informace z více sestav najednou. Chcete-li to provést, je run_id předán oddělený čárkami:

Domain-name.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX,YYYYYYYYYYY&source=someapp

Technické vlastnosti

    Automatické zahrnutí profileru je implementováno pomocí direktiv auto_append_file a auto_prepend_file, které spojují dva spustitelné soubory php:

    — auto_append_file inicializuje objekt kolekce statistik a spustí jeho práci;

    — auto_prepend_file dokončí shromažďování statistik a vygeneruje soubor zprávy se statistikami (ve formátu JSON);

    Pokud je zavoláno exit() nebo die() během běhu skriptu, soubor auto_prepend_file se neprovede. statistický soubor se nevygeneruje a blok s odkazy na soubor zprávy nebude zahrnut ve spodní části stránky.

  1. Přístup na jakoukoli stránku zpracovanou php tedy vyvolá vytvoření nového souboru sestavy, takže doporučujeme deaktivovat profiler po shromáždění statistik (obvykle několik hodin), aby nedošlo k přetečení diskové kvóty, která může být vyčerpána po vygenerování velké množství hlášení!
  2. Důležité: Profiler bude fungovat pouze v případě, že je stránka připojena k serveru standardní cestou, automaticky (tj. pomocí ovládacího panelu hostingu), jinak budete muset kontaktovat technickou podporu Hostland a nakonfigurovat profiler.
  3. V automatickém režimu se profiler připojuje pouze k hlavnímu názvu domény, profiler není automaticky připojen k subdoménám.
  4. V automatickém režimu shromažďuje profiler statistiky pouze pro skripty s příponou .php a .php5
  5. Po připojení PHP profileru není možné zaručit nepřetržitý provoz webu, proto pokud web při zapnutém profileru nefunguje správně, měl by být deaktivován a profilování pokračovat jinými prostředky.

Pojďme si to shrnout

Doufáme, že vám tento nástroj pomůže zrychlit vaše stránky na hostingu Hostland.

V článku byly částečně použity materiály od uživatele Den Golotyuk zveřejněného na webu

Balakat Obsesslav. Suf. odvozený od balaka„blábol(i)“, tvořený postupně pomocí suf. -ak(a) z „rozhovor, tlachání“ (ze stejného kmene, ale se suf. -l-, tak jako , cm.). Slova , koule(množné číslo) „rozhovor, tlachání“ v dialektech a jiných slav. Jazyk jsou známy dodnes. Cm. .

Školní etymologický slovník ruského jazyka. Původ slov. - M.: Drop. N. M. Šansky, T. A. Bobrová. 2004 .

Podívejte se, co je „balakat“ v jiných slovnících:

    blábolit- mluvit, chatovat, čmárat (Dal) Viz... Slovník synonym

    STONEK- BALKAK, já blábolím, ty blábolíš, nezralý. (kraj). Chatujte, mluvte. Ušakovův výkladový slovník. D.N. Ušakov. 1935 1940… Ušakovův vysvětlující slovník

    STONEK- jih blábolit Perm. mluvit, mluvit, mluvit, čmárat. Balakanya St. klábosení. Balakusha, balaka ob., jižní, balyaka perm., balakar, chatterbox, mluv. Balakar, buď šašek, vtipkuj jako úřední šašci. Balakir muž, nižší, kazašský,... ... Dahlův vysvětlující slovník

    blábolit- chatovat, mluvit nesmysly, ukrajinština. Balakati, blr. Balakat, polština baɫakac. žvatlat nebo žvatlat; viz Bernecker 1, 40; Mi EW 5. Další úroveň střídání samohlásek: ukrajinština. zkus zamumlat, polsky. beɫknąc – totéž, čes. blknouti; St Šachmatov, ... ... Etymologický slovník ruského jazyka od Maxe Vasmera

    Balakat- Nesov. trans. a nepřerušovaně. rozklad Mluvit, chatovat. Efraimův výkladový slovník. T. F. Efremová. 2000... Moderní výkladový slovník ruského jazyka od Efremové

    blábolit- balakat, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balakal, balakala, balakalo, balakali, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka,... .. Tvary slov

Ukázala, jak nainstalovat a nakonfigurovat xdebug, a pokryla některé základní funkce, jako je vylepšení výstupu funkce var_dump() nebo tisk trasování zásobníku volání při přijetí chybové zprávy. Ve druhé části jsme se na tuto funkci xdebug podívali jako na sledování. Trasování obsahuje všechna volání funkcí a metod v programu, čas spuštění, volitelně velikost paměti, předané a vrácené parametry. Protokol trasování vám může pomoci pochopit cestu provádění složitého programu. Namísto vkládání ladícího kódu do programu zapínáte nebo vypínáte trasování tam, kde je to potřeba, a pak k analýze souboru protokolu použijete nástroje jako grep nebo vaše vlastní aplikace PHP.

V tomto článku se podíváme na profilování. Profilování je na první pohled podobné trasování. Profilovací protokol není určen pro lidi, není určen k vizualizaci toku programu, ale poskytuje nám data pro statistickou analýzu běžícího programu.

Vytvoření protokolu profilování

Níže je krátký výňatek z protokolu profilování generovaného xdebugem:

fl=php:interní
fn=php::definovat
106 3

Fl=C:\www\drupal\includes\bootstrap.inc
fn=require_once::C:\www\drupal\includes\bootstrap.inc
1 648
cfn=php::define
hovory = 1 0 0
13 6
cfn=php::define
hovory = 1 0 0
18 4
cfn=php::define
hovory = 1 0 0
23 2


Jak vidíte, protokol profilování nelze číst přímo. K vizualizaci a analýze získaných dat použijeme další nástroje. Profilování tedy ukazuje, kolikrát byla konkrétní linka spuštěna a jak dlouho spuštění trvalo.
Vytvoření protokolu profilování značně snižuje výkon, podobně jako vytváření protokolu trasování, protože je nutné popsat průchod každého řádku. Proto, stejně jako v případě trasování, nespouštějte profilování na produkčních serverech... Existují však případy, kdy je potřeba profilování spustit na živém systému. V tomto případě buďte opatrní při spouštění xdebug současně s dalšími rozšířeními Zend, jako jsou zavaděče, optimalizátory nebo mezipaměti.
Aby xdebug začal zaznamenávat protokoly profilování, přidejte

Pamatujte, že profilování nelze spustit při spuštění spuštěním příkazu.
Protože protokol profilování je určen ke čtení programy analyzátoru, neexistují žádná další nastavení, která by vám umožnila zobrazit další informace, jako je tomu v případě protokolu trasování. Existují však některá nastavení, která umožňují konfigurovat profilování, podobná těm, která jsme použili při nastavování trasování.
Za prvé, xdebug ve výchozím nastavení zapíše protokol profilování do adresáře /tmp. Pokud používáte Windows, musíte opravit php.ini takto:
xdebug.profiler_output_dir="c:\traces"

Ve výchozím nastavení xdebug přepíše existující protokol profilování. Můžete jej nakonfigurovat tak, aby doplňoval stávající přidáním následujícího příkazu

v php.ini. Existují případy, kdy nechcete vytvořit protokol profilování pro všechny soubory, ale zároveň je aktivace profilování za běhu problematická. Místo pravidelného zapínání a vypínání profilování přidejte příkaz
xdebug.profiler_enable_trigger=Zapnuto

v php.ini. Nyní můžete profilování zapnout a vypnout předáním speciálního parametru GET nebo POST XDEBUG_PROFILE do PHP skriptu. Tím povolíte profilování pouze pro tento skript PHP. Hodnotu tohoto parametru není nutné nastavovat, pouze nezapomeňte tento parametr přidat na adresu test.php?XDEBUG_PROFILE.

Název protokolu profilování

Název, který xdebug standardně přiřadí protokolu profilování, je „cachegrind.out“. plus identifikátor procesu. Stejně jako v případě protokolu trasování můžete změnit názvy protokolu přidáním příslušných nastavení do php.ini. Název parametru xdebug.profiler_output_name. Argumentem je řetězec. které mohou obsahovat různé modifikátory. Ty nejdůležitější jsou uvedeny níže:

  • %p – identifikátor procesu
  • %r – náhodné číslo
  • %u - čas
  • %H – hodnota $_SERVER["HTTP_HOST"]
  • %R – hodnota $_SERVER["REQUEST_URI"]
  • %s – název včetně úplné cesty, lomítka jsou převedena na podtržítka
Upozorňujeme, že modifikátor %s se používá pouze pro xdebug.profiler_output_name. Pokud chcete znát název protokolu profilování, můžete zavolat funkci xdebug_get_profiler_filename().

Analýza profilování logu
Jak bylo uvedeno výše, k analýze protokolu profilování jsou zapotřebí další programy pro vizualizaci dat. Všechny profilovací protokoly, které xdebug vytváří, jsou ve formátu podobném formátu Cachegrind. Cachegrind je profilovač, který je součástí výkonnějšího programu Valgrind, programu pro ladění a profilování softwaru pro Linux. Cachegrind byl navržen tak, aby analyzoval statistiky mezipaměti, využití paměti a programových příkazů. Další nástroj Valgrind, Callgrind, kreslí grafy hovorů. Pokud jde o PHP, můžeme tuto aplikaci použít k vizualizaci a analýze protokolu profilování.
Nástroj, který se běžně používá k analýze protokolu profilování generovaného xdebugem, se nazývá . KCachegrind je svobodný software licencovaný pod licencí GPL (funguje pouze na systémech Unix). Existuje však jednoduchý program pro Windows, který je navíc zdarma. Nejprve se podíváme na verzi pro Windows.

WinCacheGrind: analýza protokolů profilování ve Windows

Aktuální verze (v době psaní autorem tohoto článku) WinCachegrind je 1.0.0.12. Tato verze pochází z roku 2005, což znamená, že WinCachegrind nebyl dlouho vyvíjen. Pokud se podíváte na poznámky k vydání, autoři píší, že program má chyby, kvůli kterým se někdy chová divně.
Doporučuji proto použít KCachegrind, spuštěný na bázi virtuálního stroje na nejnovější linuxové distribuci, například Ubuntu (pozn. překladatele, obecně řečeno zvláštní doporučení; v tomto případě bych doporučoval pouze nainstalovat Linux a neohradit se zahrada virtuálních strojů). Pod Windows je k dispozici obrovské množství virtuálních strojů. Pokud z nějakého důvodu není možné používat Unix nebo virtuální stroj, můžete nadále používat WinCachegrind pro jednoduchou analýzu protokolů profilování. WinCachegrind nekreslí grafy volání, na rozdíl od KCachegrind.
Instalace Wincachegrind je extrémně snadná. Spusťte instalační program, kliknutím na tlačítko přijměte licenci a instalace je dokončena. Nyní můžete spustit program a otevřít jeden z protokolů profilování cachegrind vytvořených xdebugem.

Kliknutím na hodiny nebo ikonu sigma můžete přepínat mezi zobrazením informací v absolutních hodnotách a procentech. Procentuální zobrazení ukazuje, kolik času v procentech celkového času trvá volání funkce v daném bloku.
Dvě užitečná nastavení jsou Profiler -> Skrýt rychlé funkce a Profiler -> Skrýt funkce knihovny. První přepínač skrývá funkce, jejichž časový příspěvek k celkové době provádění programu je nevýznamný.
Druhé nastavení, Profiler -> Hide Library Functions, skryje funkce zabudované do PHP z obecné analýzy. Když jsou obě tato nastavení povolena, uvidíte méně dat, což vám umožní zaměřit se na oblasti kódu, které vyžadují optimalizaci.
Hlavní okno obsahuje dvě záložky: Řádek po řádku a Celkově. Obě karty zobrazují stejné informace, ale karta Souhrn shromažďuje informace pro lepší prezentaci. Vlastní čas zobrazuje dobu běhu kódu v aktuálním bloku, zatímco Kumulativní čas (Cum.) zobrazuje celkovou dobu běhu funkcí v daném bloku.

KCacheGrind: analýza protokolů profilování v Unixu

Unixová verze KCachegrind poskytuje více funkcí než WinCachegrind. KCachegrind vizualizuje data a sestaví graf volání.
Chcete-li jej začít používat, musíte nainstalovat KCachegrind. Současná verze . K dispozici je novější verze (0.10.1), která je však součástí balíčku Valgrind.
Pokud je to možné, použijte k instalaci balíčku KCachegrind správce balíčků. KCachegrind používá GraphViz ke kreslení grafů volání, takže musíte nainstalovat také balíček GraphViz, pokud váš správce balíčků automaticky neinstaluje závislé balíčky.
Pokud nenajdete binární balíček KCachegrind, budete si muset KCachegrind zkompilovat sami. Po stažení zdrojů spusťte

./configure --prefix=/opt/kde3
udělat
provést instalaci

Jak můžete poznamenat, musíte zadat cestu k aktuální instalaci knihovny KDE. Pokud nevíte, kde se na vašem systému nacházejí knihovny KDE, použijte

pro zobrazení cesty ke knihovnám KDE.
Po instalaci můžete spustit KCacheGrind z příkazového řádku

Tabulkové zobrazení dat v KCachegrind je velmi podobné WinCachegrindu. Můžete také přepínat mezi absolutními a procentuálními hodnotami. Některé funkce KCachegrind nejsou navrženy pro PHP. Obrázek níže ukazuje graf volání programu phpMyAdmin:


Jak můžete vidět, většinu času spouštění strávili uvnitř common.inc.php. Následující snímek obrazovky ukazuje vizualizaci volání funkcí uvnitř common.inc.php:

Tento blok kódu spouští dvě require_onces, což je polovina času potřebného ke spuštění common.inc.php. Dvojitým kliknutím na libovolný obdélník se dostanete hlouběji do analýzy dat.

Optimalizace kódu na základě profilovacích dat

Před optimalizací vždy profilujte své aplikace. S optimalizací můžete začít sami, v místě, kde se vám zdá, že tato optimalizace přinese efekt, ale není to vždy pravda. Optimalizace má efekt hlavně jen v těch částech, které zabírají nejvíce času v procesu provádění.
Pokud spouštíte mnoho kopií programu současně, možná budete muset optimalizovat tu část vašeho programu, která zabírá většinu času provádění. V tomto případě optimalizace neurychlí obsluhu jednoho jednotlivého požadavku, ale umožní vašemu serveru zpracovat vysoké zatížení a zároveň spotřebovat méně zdrojů na obsluhu těchto požadavků.
Když se díváte na trvání běhu profileru, mějte na paměti, že absolutní hodnoty jsou méně důležité než relativní hodnoty. Absolutní hodnoty měřené na různých systémech se mohou lišit. Než však začnete svůj kód optimalizovat, zvažte následující věci.
Důležitým pravidlem při optimalizaci je snížení počtu I/O operací. Některé I/O operace jsou ve srovnání s výpočty velmi časově náročné. Omezení takových operací může být velmi efektivní způsob, jak urychlit váš program. Odstranění jednoho I/O volání může poskytnout efektivnější zlepšení než trávit spoustu hodin optimalizací kódu. Proto byste se měli nejprve zaměřit na I/O operace, než začnete kódovat.
Před optimalizací můžete také zvýšit počet svých serverů. Můžete si koupit obrovský, který vám poskytne malé zvýšení produktivity. Doba vývoje je dražší než cena nového serveru. A pokud navýšíte množství hardwaru, můžete si být jisti, že navýšení získáte okamžitě bez jakéhokoli dopadu na kód PHP. Když vývojář stráví jeden nebo dva dny optimalizací kódu, nikdy nemůžete říct, jak moc se zvýší produktivita. A nakonec už si nemůžete být jisti, že optimalizace nepřinese žádné chyby.
Převedení některých stránek na statické stránky je jedním ze způsobů, jak dosáhnout lepšího výkonu. Řekněme, že existuje web s velkým provozem, kde PHP skript vytvoří první stránku pro každý požadavek a vybere informace z databáze nebo souboru XML. Pokud se data na stránce mění dostatečně často, můžete znovu vytvořit její statickou kopii. Pokud pro stránku není převod do statického zobrazení možný (na stránce jsou zobrazeny některé osobní informace), můžete některé bloky převést na statické zobrazení.
Další úroveň optimalizace nevyžaduje změnu kódu PHP. Jak víme, PHP je interpretovaný jazyk. To znamená, že jeho příkazy jsou za běhu překládány do mezikódu. Vysílání se opakuje při každém spuštění skriptu. Díky tomu je PHP pomalejší ve srovnání s jazyky jako C nebo Java, které nevyžadují analýzu kódu při každém spuštění. Pro PHP můžete použít mezipaměti reprezentace (viz můj překlad....) k uložení a opětovnému použití mezikódu, což zrychluje spouštění a provádění.
To vše neznamená, že na optimalizaci PHP kódu není čas ani místo. Některé optimalizace kódu mohou výrazně zlepšit výkon. Vždy si však pamatujte, že změna kódu vždy s sebou nese riziko zavedení dalších chyb a bezpečnostních problémů. Pamatujte také, že optimalizací kódu je méně čitelný.

Závěr

Vytvoření a vizualizace profilovacího logu je jednou z důležitých podmínek pro optimalizaci PHP kódu. Musíte vědět, která místa v programu zaberou nejvíce času, a právě tam byste měli začít s optimalizací.
V příštím článku se podíváme na ladění pomocí xdebug. xdebug vám může poskytnout možnost vzdáleného ladění. Pomocí klienta, který má tuto schopnost, jako je Eclipse PDT, můžete ladit svůj kód, aniž byste jej měnili, nastavovat body přerušení, přeskakovat sekce kódu a sledovat, jak a kde proměnné mění hodnoty.

Poslední aktualizace: 12.01.2019

Zveřejnění: 01.09.2016


Pomocí PhpStorm můžete analyzovat výkon vašeho PHP kódu jeho profilováním. Profilování vám umožní shromažďovat statistiky provádění programu: názvy prováděných funkcí, kolikrát byla každá funkce provedena, doba provádění každé funkce, jaké další funkce byly volány v rámci každé funkce atd.

Tyto informace vám mohou poskytnout rady o tom, kde lze váš kód vylepšit.

Pojďme se podívat, jak to funguje.

1. Předpoklady

PhpStorm IDE může používat profilovací informace shromážděné pomocí nástroje Xdebug. Toto rozšíření musí být nainstalováno a konfigurováno ve vašem systému. Další informace naleznete v instalační příručce Xdebug.

Pokud jste uživatelem skvělé platformy přenosných serverů a softwarového prostředí Open Server, nemusíte nic dělat – rozšíření Xdebug je již nainstalováno a připojeno.

Pozornost

Xdebug není kompatibilní s IonCube. IonCube je nástroj (utility) pro ochranu softwaru napsaného v programovacím jazyce PHP. Vypněte rozšíření IonCube úplně nebo během používání Xdebug. Dalším možným problémem může být, že Xdebug je standardně nakonfigurován na portu 9000, což je stejný port, který používá Open Server. Chcete-li tento problém vyřešit, v jednom z případů byste měli změnit číslo portu.

Všechny zde popsané akce byly reprodukovány se správnými očekávanými výsledky v následujícím technologickém prostředí:

2. Povolení profilu Xdebug

Profilování přidává určitou režii k běhu aplikace a generuje obrovské množství informací o disku. Proto je nejlepší povolit profiler Xdebug pouze v případě potřeby a za normálních okolností jej zakázat.

Xdebug se konfiguruje pomocí direktiv v aktivním souboru php.ini. Kdykoli povolíte profiler, musíte nakonfigurovat následující direktivu:

xdebug.profiler_output_dir = /cesta/k/úložišti/snímky

Hodnota direktivy musí specifikovat cestu, která bude použita k uložení profilovacích souborů.

2.1. Globálně

Chcete-li povolit profiler Xdebug globálně, musíte použít následující direktivu:

xdebug.profiler_enable = 1

Tímto způsobem bude profilování provedeno při každém spuštění libovolného skriptu. Tuto možnost je vhodné použít pro povolení profileru pouze ve výjimečných případech.

2.2. Použití dalších možností tlumočníka

Profiler můžete povolit pomocí dalších parametrů interpretu v okně Konfigurace spuštění/ladění. Chcete-li jej otevřít, použijte následující položky v hlavní nabídce IDE:

Možnost (na obrázku výše označená červeným obrysem) Možnosti tlumočníka (možnosti tlumočníka) sekce Příkazový řádek (příkazový řádek) by měla obsahovat následující řádek:

D xdebug.profiler_enable = 1

Tato možnost vám umožní používat profiler pro konkrétní konfiguraci, nikoli v globálním měřítku.

2.3. Pomocí speciálních parametrů GET/POST nebo souboru cookie

Pro více kontrolované profilování by měla být použita následující směrnice:

xdebug.profiler_enable_trigger = 1

Pokud je hodnota direktivy nastavena na 1, pak při provádění skriptu s parametrem GET/POST nebo cookie s názvem XDEBUG_PROFILE bude profilování provedeno bez ohledu na nastavení xdebug.profiler_enable.

Tato možnost povolení profilovače je nejoblíbenější.

3. Sběr protokolů profilování

Aby bylo možné analyzovat protokoly profilování, je třeba je nejprve shromáždit.

3.1. Sbírka protokolů profilování pro webové aplikace

Chcete-li profilovat webové aplikace, použijte profiler Xdebug globálně nebo jej spusťte a zastavte na požádání. Po zapnutí profileru otevřete aplikaci v prohlížeči a začněte sbírat data – protokoly profilování.

Při analýze problémů s výkonem je použití bookmarkletů nebo rozšíření prohlížeče pro ladění velmi dobrý přístup, protože vám umožňuje procházet aplikací a spustit profilovač pouze v případě, že je zjištěn problém s výkonem. To vám umožňuje shromažďovat cílené protokoly profilování.

3.2. Sbírka protokolů profilování pro aplikace CLI a testy jednotek

Chcete-li profilovat aplikace CLI a testy jednotek, použijte profiler Xdebug globálně nebo vytvořte samostatnou konfiguraci běhu, která profiler povolí pomocí okna Run/Debug Configurations. Poté spusťte aplikaci CLI nebo testy jednotek a shromážděte data profilování.

Při analýze problémů s výkonem v testech jednotek je dobrým přístupem vytvořit samostatnou konfiguraci pro spuštění pouze těch testů jednotek, u kterých existuje podezření, že mají problémy s výkonem. To vám umožňuje shromažďovat cílené protokoly profilování.

4. Analýza popisu profilovacího logu

Podívejme se blíže na protokol profilování.

4.1. Otevření protokolu profilování

Chcete-li otevřít protokol profilování, použijte následující položky v hlavní nabídce IDE: .

Pokud jste uživatelem skvělé přenosné serverové platformy Open Server, můžete také použít multiplatformní nástroj Webgrind k zobrazení protokolu profilování. Lze jej nalézt prostřednictvím následujících položek hlavní nabídky Open Server [Pokročilé → PHP profiler].

Protokoly profilování se ukládají do složky podle nakonfigurované direktivy xdebug.profiler_output_dir. Vygenerovaný název souboru vždy začíná cachegrind.out. a končí buď PHP nebo ID procesu webového serveru nebo hash crc32 adresáře, ve kterém je umístěn profilovaný skript.


4.2. Statistika provedení Tab

Na kartě Statistika spuštění můžete prozkoumat souhrnné informace o metrikách provádění každé volané funkce. Můžete vidět všechny soubory, volání funkcí, kolikrát byly volány a dobu provedení (absolutní a relativní) každé funkce.

Horní mřížka zobrazuje různé metriky:

  • Vlastní čas – množství času, které funkce stráví prováděním svého kódu (bez zohlednění volání jiných funkcí).

Spodní mřížka zobrazuje dvě záložky: Callees – funkce, které zde skript volá, a Callers – odkud byl skript volán. Zde můžete vidět různé metriky:

  • Čas – celkový čas provedení.
  • Hovory - počet hovorů.

Funkce s dlouhou dobou provádění nebo velkým počtem volání jistě vyžadují testování.

4.3. Karta Strom volání

Karta Strom volání zobrazuje cesty provádění vašeho kódu. Zde můžete vidět podrobnější informace o době provádění každé funkce a tak dále.

Horní mřížka zobrazuje stromy volání (které funkce jsou volány v jiných funkcích) a další metriky:

  • Volatelný (nazývaný soubor) – soubor, který byl spuštěn.
  • Čas – celkový čas provedení.
  • Hovory - počet hovorů.

Ve spodní mřížce jsou zobrazeny dvě záložky: Callees – funkce, které se zde volají, a Callers – odkud je funkce volána. Zde můžete vidět různé metriky:

  • Volatelná (nazývaná funkce) – funkce, která byla provedena.
  • Čas – celkový čas provedení.
  • Hovory - počet hovorů.

Kontrolní otázky

  1. Proč jsou PHP aplikace profilovány?
  2. Kolik hlavních způsobů existuje, jak povolit profiler Xdebug?
  3. Jaký je nejlepší způsob, jak postupovat při profilování aplikací CLI a testech jednotek?
  4. Jaké nástroje lze použít k analýze protokolů profilování?
  5. Kterým metrikám byste při analýze protokolu profilování měli věnovat pozornost jako první?

Publikace na dané téma