itthon / Online szolgáltatás / Képzeletbeli profilok php. PHP alkalmazások profilozása PhpStorm és Xdebug segítségével. Profilalkotási naplók gyűjteménye

Képzeletbeli profilok php. PHP alkalmazások profilozása PhpStorm és Xdebug segítségével. Profilalkotási naplók gyűjteménye

Idővel minden PHP programozó szembesül az alkalmazása gyenge teljesítményének problémájával. Előfordulhat, hogy egy adott oldal lassan töltődik be, vagy túl sokáig tart a válasz az API-tól. És néha elég nehéz megérteni, hogy mi az oka a fékeknek? Néha bonyolultabb helyzetek is előfordulnak: az éles szerveren az api nagyon lassú, de azon a padon, ahol a fejlesztés zajlik, minden rendben van. És nézd meg, mi a baj. Az éles szerveren végzett hibakeresés a reménytelenség extrém foka, amihez persze jobb nem vezetni.

Ilyen helyzetekre találták ki az alkalmazásprofilozóknak nevezett speciális eszközöket. A PHP világában ezt a szerepet az xDebug, valamint az xhprof tölti be. Az xhprof egy könnyebb, egyszerűbb és rugalmasabb eszköz, ezért használata előnyösebb. Érdekes módon az xhprof-ot a facebook fejlesztette még 2009-ben, de hivatalosan még mindig nincs tőlük php7 támogatás, és nem is lesz több, mióta a facebook átállt a HHVM-re. A PHP fejlesztők kiterjedt közösségének köszönhetően azonban megjelent egy PHP7-et támogató villa, amelynek telepítése nem okoz nehézséget.

Telepítés

Először telepítenie kell az xhprof-ot:

Git klón https://github.com/longxinH/xhprof xhprof cd xhprof/extension phpize ./configure --with-php-config=/usr/bin/php-config sudo make && sudo make install mkdir /var/tmp/ xhprof

Extension=xhprof.so xhprof.output_dir="/var/tmp/xhprof"

A /var/tmp/xhprof mappának írási jogosultsággal kell rendelkeznie, mert A profilalkotási eredmények ott lesznek elmentve.

Újratöltheti a PHP-FPM-et, és ellenőrizheti, hogy a bővítmény telepítve van-e. Ez elcsépelt dolog, ezt a phpinfo() függvény kimenetével lehet megtenni;

xhprof telepítve van, használhatod. Az xhprof csomag egy nagyon felhasználóbarát felületet tartalmaz a profilalkotási jelentések elemzéséhez. Az xhprof lehetővé teszi jelentések készítését, mind szöveges, mind grafikus formában. Az xhprof telepítőmappa tartalmazza az xhprof_html-t és az xhprof_lib-et, amelyekre szükségünk lesz. Mappa xhprof_html – hozzáférést biztosít a grafikus felhasználói felülethez. xhprof_lib - könyvtár a kód megjelenítéséhez és elemzéséhez. Célszerű a teljes xhprof mappát áthelyezni a /var/www/xhprof mappába, és beállítani hozzá egy virtuális gazdagépet, például xhprof.loc. Példa az nginx-hez:

Szerver ( figyeljen 80; szerver_neve xhprof.loc; utf-8 karakterkészlet; gyökér /var/www/xhprof/xhprof_html; index index.php; hely / ( try_files $uri $uri/ /index.php?q=$uri&$args ; ) hely ~ \.php ( fastcgi_pass 127.0.0.1:9000; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi)_)

Ne felejtse el frissíteni a hosts fájlt is. Most, amikor a böngészőbe beírjuk az xhprof.loc URL-t, a profilkészítő webes felületére kerülünk, ahol elérhetőek lesznek az általa generált fájlok.

Most közvetlenül folytathatja a kód profilozását.

A profilkészítő engedélyezéséhez használja az xhprof_enable() függvényt, amely a következő jelzőket fogadja be bemenetként:

  • XHPROF_FLAGS_CPU - processzorstatisztikák rögzítésére;
  • XHPROF_FLAGS_MEMORY - a memóriához;
  • XHPROF_FLAGS_NO_BUILTINS - a beépített funkciók figyelmen kívül hagyásához.

A profilkészítő letiltásához használja az xhprof_disable() függvényt. A kényelem kedvéért két szkriptet írunk a header.php és a footer.php, amelyek ezeket a funkciókat látják el. A header.php a profilozott szkript elején, a footer.php pedig a végén található. A footer.php a profilozási adatok tárolásáért is felelős.

header.php: if (extension_loaded("xhprof")) ( include_once "/var/www/xhprof/xhprof_lib/utils/xhprof_lib.php"; include_once "/var/www/xhprof/xhprof_lib/utils/xhprof_runs.php"; xhprof_enable(XHPROF_FLAGS_CPU) xhpro fRuns->save_run ($xhprofData, $profilerNamespace); )
Használat

Miután csatlakoztatta a header.php és a footer.php fájlokat a profilozott szkripthez, elkezdheti: a profilozott szkript végrehajtása során létrejön egy fájl, amely a /var/tmp/xhprof könyvtárba kerül, és információkat tartalmaz a program működéséről. forgatókönyv. Amikor megnyitja az xhprof.loc webes felületet, ez a generált fájl lesz elérhető:


Amikor megnyit egy profilfájlt, részletes információk jelennek meg az alkalmazás működéséről, a teljes hívási verem:


Mit jelentenek az oszlopok:

  • Hívások- függvényhívások száma és százaléka;
  • Incl. Fali idő- beágyazott függvényekkel rendelkező függvény végrehajtási ideje;
  • Excl. Fali idő- beágyazott függvények nélküli függvény végrehajtási ideje;
  • Incl. CPU- CPU idő beágyazott funkciókkal;
  • Excl. CPU- CPU idő beágyazott funkciók nélkül;
  • Incl. MemUse- memóriafelhasználás beágyazott függvényekkel;
  • Excl. MemUse- memóriafelhasználás beágyazott függvények nélkül;
  • Incl. PeakMemUse- maximális memóriafelhasználás beágyazott függvényekkel;
  • Excl. PeakMemUse- maximális memóriafogyasztás beágyazott funkciók nélkül.

Ha követi a hivatkozást, egy gyönyörű hívásfa jelenik meg a leglassabb kód vizuális jelzésével. Ha ez nem történik meg, akkor valószínűleg telepítenie kell a graphviz könyvtárat:

Apt-get install graphviz

Példa egy felépített gráfra:

Az én esetemben a szűk keresztmetszet az adatbázissal való interakció.


Az xhprof használata éles szerveren

Kezdetben az xhprof-ot kifejezetten a harci kód profilozására fejlesztették ki, éles szervereken. Egyszerűen nincs más ingyenes és hatékony eszköz a PHP7 kód profilozására a harcban, így az xhprofnak nincsenek versenytársai. Pontosabban, van tapasztalatom az xhprof használatában olyan éles szerveren, amely napi egymillió kérést dolgoz fel. Php7-et használ, és eddig nem találtak problémát. Az xhprof azonban nem fut minden kérésnél – túl sok profilozó fájlt generálna. Számomra a profilkészítő csak akkor indul el, ha a kérésnek az „XHPROF_ENABLE” fejléce van, és igazra van állítva. Használhat másik stratégiát is, például futtassa véletlenszerűen a profilkészítőt, mondjuk 1/1000 valószínűséggel. Akkor lesz egy elég tiszta kép is.


Következtetés

Annak ellenére, hogy az xhprof hivatalosan nem támogatott a php7-hez, mégis nélkülözhetetlen eszköz a php fejlesztők számára.

Utolsó frissítés: 2019.01.12

Megjelenés: 2016.09.01


A PhpStorm segítségével elemezheti PHP kódja teljesítményét profilozással. A profilozás lehetővé teszi a programvégrehajtási statisztikák összegyűjtését: a végrehajtott függvények nevét, az egyes funkciók végrehajtásának hányszorosát, az egyes funkciók végrehajtási idejét, az egyes függvényeken belül milyen egyéb funkciókat hívtak meg stb.

Ezek az információk tippeket adhatnak arra vonatkozóan, hogy hol lehet javítani a kódon.

Lássuk, hogyan működik.

1. Előfeltételek

A PhpStorm IDE felhasználhatja az Xdebug eszközzel gyűjtött profilalkotási információkat. Ezt a bővítményt telepíteni és konfigurálni kell a rendszeren. További információkért tekintse meg az Xdebug telepítési útmutatóját.

Ha Ön a csodálatos hordozható szerverplatform és az Open Server szoftverkörnyezet felhasználója, akkor nem kell semmit tennie – az Xdebug bővítmény már telepítve van és csatlakoztatva van.

Figyelem

Az Xdebug nem kompatibilis az IonCube-val. Az IonCube egy eszköz (segédprogramok) a PHP programozási nyelven írt szoftverek védelmére. Teljesen vagy az Xdebug használata közben tiltsa le az IonCube bővítményt. Egy másik lehetséges probléma az lehet, hogy az Xdebug alapértelmezés szerint a 9000-es porton van beállítva, amely ugyanaz a port, amelyet az Open Server használ. A probléma megoldásához az egyik esetben módosítani kell a portszámot.

Az itt leírt összes művelet a megfelelő elvárt eredménnyel reprodukált a következő technológiai környezetben:

2. Az Xdebug profilozó engedélyezése

A profilozás megnöveli az alkalmazás futtatását, és hatalmas mennyiségű lemezinformációt generál. Ezért a legjobb, ha az Xdebug profilozót csak akkor engedélyezi, ha szükséges, és normál körülmények között tiltja le.

Az Xdebug konfigurálása az aktív php.ini fájlban található direktívákon keresztül történik. Amikor engedélyezi a profilkészítőt, a következő direktívát kell konfigurálnia:

xdebug.profiler_output_dir = /útvonal/üzlethez/pillanatképek

A direktíva értékének meg kell adnia azt az elérési utat, amelyen a profilozó fájlok mentésre kerülnek.

2.1. Globálisan

Az Xdebug profilozó globális engedélyezéséhez a következő direktívát kell használnia:

xdebug.profiler_enable = 1

Így a profilalkotás minden szkript futtatásakor megtörténik. Kényelmes ezt az opciót a profilkészítő engedélyezésére csak ritka esetekben használni.

2.2. További tolmács opciók használata

A profilkészítőt további értelmező paraméterekkel engedélyezheti a Futtatás/hibakeresés konfigurációk ablakban. Megnyitásához használja a következő elemeket az IDE főmenüjében:

Az opció (a fenti képernyőképen piros körvonallal jelölt) Tolmács opciók (tolmács opciók) szakasz Parancssor (parancssor) a következő sort kell, hogy tartalmazza:

D xdebug.profiler_enable = 1

Ez az opció lehetővé teszi, hogy a profilkészítőt egy adott konfigurációhoz használja, nem pedig globális szinten.

2.3. Speciális GET/POST paraméterek vagy cookie fájl használata

Ellenőrzöttebb profilalkotáshoz a következő irányelvet kell használni:

xdebug.profiler_enable_trigger = 1

Ha a direktíva értéke 1, akkor egy XDEBUG_PROFILE nevű GET/POST paraméterrel vagy cookie-val rendelkező parancsfájl végrehajtásakor a profilalkotás az xdebug.profiler_enable beállítástól függetlenül megtörténik.

Ez a profilkészítő engedélyezési lehetőség a legnépszerűbb.

3. Profilalkotási naplók gyűjtése

A profilalkotási naplók elemzéséhez először össze kell gyűjteni azokat.

3.1. Profilalkotási naplók gyűjteménye webes alkalmazásokhoz

A webalkalmazások profilálásához használja az Xdebug profilkészítőt globálisan, vagy indítsa el és állítsa le igény szerint. A profilkészítő bekapcsolása után nyissa meg az alkalmazást a böngészőben, hogy megkezdje az adatgyűjtést - a profilalkotási naplókat.

A teljesítményproblémák elemzésekor a könyvjelzők vagy a böngészőbővítmények használata nagyon jó módszer a hibakereséshez, mivel ez lehetővé teszi, hogy az alkalmazásban navigáljon, és csak akkor indítsa el a profilkészítőt, ha teljesítményproblémát észlel. Ez lehetővé teszi, hogy célzott profilozási naplókat gyűjtsön.

3.2. Profilalkotási naplók gyűjteménye CLI alkalmazásokhoz és egységtesztekhez

A CLI-alkalmazások és az egységtesztek profilálásához használja az Xdebug-profilozót globálisan, vagy hozzon létre egy külön futtatási konfigurációt a profilkészítő engedélyezéséhez a Run/Debug Configurations ablakban. Ezután futtassa a CLI-alkalmazást vagy az egységteszteket a profilozási adatok gyűjtéséhez.

Az egységtesztek teljesítményproblémáinak elemzésekor jó megközelítés egy külön konfiguráció létrehozása, amely csak azokat az egységteszteket futtatja, amelyekről feltételezhető, hogy teljesítményproblémákkal küzdenek. Ez lehetővé teszi, hogy célzott profilozási naplókat gyűjtsön.

4. A profilalkotási napló leírásának elemzése

Nézzük meg közelebbről a profilalkotási naplót.

4.1. A profilalkotási napló megnyitása

A profilalkotási napló megnyitásához használja a következő elemeket az IDE főmenüjében: .

Ha Ön a csodálatos Open Server hordozható szerverplatform felhasználója, akkor a Webgrind platformok közötti eszközt is használhatja a profilalkotási napló megtekintéséhez. Megtalálható a következő Open Server főmenüpontokon keresztül [Speciális → PHP profilozó].

A profilozási naplók a konfigurált xdebug.profiler_output_dir direktíva szerint egy mappába kerülnek mentésre. A generált fájlnév mindig a cachegrind.out karakterlánccal kezdődik. és a PHP vagy a webszerver folyamatazonosítójával vagy annak a könyvtárnak a crc32 hash-jével végződik, amelyben a profilozott szkript található.


4.2. Végrehajtási statisztika lap

A Végrehajtási statisztikák lapon megtekintheti az egyes meghívott függvények végrehajtási metrikáinak összefoglaló információit. Megtekintheti az összes fájlt, függvényhívást, hányszor hívták meg őket, és az egyes függvények végrehajtási idejét (abszolút és relatív).

A felső rács különböző mutatókat jelenít meg:

  • Saját idő – az az idő, ameddig egy függvény a kódja végrehajtásával tölt (anélkül, hogy figyelembe venné a többi függvényhívást).

Az alsó rács két fület jelenít meg: Callees - a függvények, amelyeket a szkript itt hív meg, és Callers - ahonnan a szkript meghívásra került. Itt megtekintheti a különböző mutatókat:

  • Idő – teljes végrehajtási idő.
  • Hívások – hívások száma.

A hosszú végrehajtási idejű vagy nagy számú hívású funkciók minden bizonnyal tesztelést igényelnek.

4.3. Call Tree Tab

A Hívásfa lap a kód végrehajtási útvonalait jeleníti meg. Itt részletesebb információkat láthat az egyes funkciók végrehajtási idejéről és így tovább.

A felső rács hívásfákat (amelyeket más függvényekben hívnak) és egyéb mutatókat jelenít meg:

  • Hívható (hívható fájl) – a végrehajtott fájl.
  • Idő – teljes végrehajtási idő.
  • Hívások – hívások száma.

Az alsó rács két fület jelenít meg: Hívottak – az itt meghívott függvények és a Hívók – ahonnan a függvény hívódik. Itt megtekintheti a különböző mutatókat:

  • Meghívható (meghívott függvény) - végrehajtott függvény.
  • Idő – teljes végrehajtási idő.
  • Hívások – hívások száma.

Ellenőrző kérdések

  1. Miért vannak profilozott PHP alkalmazások?
  2. Hány fő módja van az Xdebug profilozó engedélyezésének?
  3. Mi a legjobb módja a CLI-alkalmazások és egységtesztek profilalkotásának?
  4. Milyen eszközökkel elemezhetők a profilalkotási naplók?
  5. A profilalkotási napló elemzésekor milyen mérőszámokra kell először figyelni?

A FirePHP a firebug kiterjesztése, amely kis php osztályával együtt lehetővé teszi, hogy adatokat sugározzon a php-ről, például mindenféle var_dump és egyéb hibakeresési információt a firebug konzolra. A bővítmény fő előnye, hogy minden hibakeresési információt fejléceken keresztül sugároznak, és nem szennyezik az oldalakat, és semmilyen módon nem törik meg az alkalmazás logikáját. Hivatalos webhely: http://firephp.org/.

Fő gondolat.

Az általános profilalkotási algoritmus a következő:
  1. Az oldal elején engedélyezzük a profilalkotást az xhprof_enable() segítségével
  2. Az oldal végén kapcsolja ki a profilalkotást az xhprof_disable() segítségével, és mentse az összegyűjtött adatokat a save_run() paranccsal.
  3. Ezt követően a firephp php osztály használatával egy hivatkozást adunk át a profilozási adatokra a kliens résznek
  4. A firebug konzolban megnyitjuk a szükséges információkat
  5. Örülünk :)
Azt is szeretném elmondani, hogy természetesen nagyszerű, ha ezeket a funkciókat kézzel adjuk hozzá a PHP-szkriptekhez. De azt szeretném, hogy ezek az információk mindig kéznél legyenek a fejlesztés során, és ne kerüljenek az éles szerverekre. Ezt a problémát a következőképpen oldjuk meg:

Projektjeinkben szinte minden szkriptben már az elején be van kötve egy munkafájl osztálybetöltővel, összekötő funkciókkal és egyéb szükséges dolgokkal. Ezért ebbe a fájlba belefoglaltuk a profilalkotást. És annak érdekében, hogy tetszés szerint be- és kikapcsolhassuk a hibakeresési módot, hozzáadtunk egy ellenőrzést a konfigurációs állandóhoz, és ezeket az ellenőrzéseket néhány metacímkébe csomagoltuk, amelyeket a projekt felépítésekor automatikusan eltávolítanak. Ugyanez vonatkozik a profilalkotás kikapcsolására és a fejlécekbe való információ írására firephp segítségével - ezeket a feladatokat egy függvény oldja meg, amely minden PHP szkript végén meghívódik, és szintén meta tagokba van csomagolva. Valahogy így néz ki:

// A következő állandók az alkalmazás konfigurációs fájljában vannak beírva

/** A környezet működési módja * */
define("APPLICATION_ENV" , "dev" ); // dev - hibakeresés | pro - produkció
/** A profilkészítő elérési útja */
define("XHPROF_ROOT" , __DIR__ . "/ExtProcs/debug/xhprof-0.9.2");

/***************************************************************************************
* Ezután az egyes szkriptek elején betöltött fájlban elindítjuk a profilalkotást
* A DEV_START és a DEV_END a metacímkéink, a köztük lévő mindent kivágunk az összeállítás során
***************************************************************************************/

//-- DEV_START
//-- debug módban debug könyvtárakat kapcsolunk

// Firephp betöltése
igényel_egyszer(__DIR__ . "/includes/ExtProcs/debug/firephp/FirePHP.class.php");
//-- betölti a profilozót
"/xhprof_lib/utils/xhprof_lib.php");
igényel_egyszer(XHPROF_ROOT. "/xhprof_lib/utils/xhprof_runs.php");
// A profilalkotás inicializálása a szükséges jelzőkkel. A zászlók részletes leírása
// a php.net/manual/ru/xhprof.constants.php címen található
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
//-- DEV_END

// Nos, ez a függvény minden szkript végén meghívásra kerül
// A hívása a DEV_START és a DEV_END nyelvekre is kiterjed

/**
* Hozzon létre egy hivatkozást a profilalkotás eredményéhez, és jelenítse meg a konzolon
*/
függvény dev_boot_Down() (
if (APPLICATION_ENV === "fejlesztő" ) (
// Inicializálja a firephp példányt
$firephp = FirePHP::getInstance(true);
// Profilozás kikapcsolása és adatok mentése
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing" );
// Hozzon létre egy hivatkozást a profilozási adatokhoz, és írja be a konzolba
$link = "http://" . $_SERVER["HTTP_HOST" ] . "/includes/ExtProcs/debug/xhprof-0.9.2/xhprof_html/index.php?run=($run_id)&source=xhprof_testing\n";
$firephp->info($link, "profilozási adatok" );
}
}


* Ezt a forráskódot a Source Code Highlighter kiemelte.

Nem megyek bele a bővítmények telepítésének részleteibe, mert itt minden egyszerű. Csak a beállítás néhány szempontjáról szólok. Az xhproof-nak csak egy konfigurációs változója van - az xhprof.output_dir, amely arra a mappára mutat, ahová a profilozási adatok mentésre kerülnek. Ezért győződjön meg arról, hogy a felhasználó, aki alatt a PHP-szkriptek végrehajtásra kerülnek, rendelkezik-e írási jogokkal a megadott könyvtárba. Tehát írj valami ilyesmit a php.ini-be:


extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"

A hívási grafikonok rajzolásához jó ötlet például a dot vagy a Graphviz telepítése. Graphviz van MacOS X-en.

A fent leírt eljárások elvégzése után bármikor megnyithattuk és megtekinthettük bármelyik szkriptünk profilozását közvetlenül a böngészőben.

Az alkalmazásprofilozás a különböző programrészek (fájlok és függvények) végrehajtási sebességére vonatkozó adatok gyűjtése. Számos PHP profilkészítő eszköz áll rendelkezésre, de nem minden eszköz alkalmas arra, hogy közvetlenül a termelési helyen végezzen elemzéseket.

Az XHProf és fork Tideways egy kényelmes és egyszerű profilkészítő, amely hatékonyan gyűjthet statisztikákat egy alkalmazás működéséről anélkül, hogy az alkalmazás (vagy a webhely) sebességét szinte csökkentené.

Miért a profilkód?

Ha az alkalmazás lassan kezd működni (lásd: „A webhely lassulni kezdett”), a profilozás lehetővé teszi, hogy megtudja, melyik rész a leglassabb. A profilalkotás eredménye általában a végrehajtott függvények listája a végrehajtási idővel együtt.

A kódprofilozásnak első helyen kell lennie az alkalmazásoptimalizálási folyamatban. Minden más csak találgatás lenne, és valószínűleg rossz. Tudnia kell, hogy pontosan mi okozza a problémákat és a „féket”.

A profilalkotás a kód végrehajtási idejére vonatkozó statisztikák gyűjtésére és rendszerezésére szolgáló eljárás. Ez nem optimalizálási vagy programmódosítási folyamat. Ennek a folyamatnak az eredménye általában egy kiterjesztett jelentés a programösszetevőkről és a funkció teljesítménystatisztikáiról.

Az XHProf megoldást pontosan erre fejlesztették ki. Úgy tervezték, hogy valódi webhelyeken működjön. Ennek a profilozónak az a fő ötlete, hogy minimális terhelést hozzon létre az alkalmazáson, miközben összegyűjti az összes szükséges adatot a működési sebességről. A megoldást a Facebook szakemberei fejlesztették ki.

Hogyan lehet automatikusan csatlakoztatni a php profilert?

Szakembereink keményen dolgoztak, és ezt a folyamatot teljesen automatizálták.
Csak be kell jelentkeznie, válassza ki a kívánt tartományt a „Domains” fülön, kattintson a „PHP.INI + PHP Profiler” ikonra, és engedélyezze a „Domain Profiler” jelölőnégyzetet.

A funkció bekapcsolása eltarthat egy ideig, általában nem több 10 percnél.

A php 5.2-es, 5.3-as, 5.4-es, 5.5-ös, 5.6-os, 7.0-s verzióihoz az XHProf profilozót, a 7.1-es és újabb php verziókhoz a Tideways profilozót használjuk.

Miután engedélyezte, webhelyének minden PHP által feldolgozott oldalán egy speciális blokk kerül beépítésre a jelentésfájlra mutató hivatkozásokkal (a link így fog kinézni):

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

És így fog kinézni a jelentésfájl:

A táblázat az egy oldalon belül végrehajtott funkciók listáját tartalmazza további információkkal:

  • Hívások – a függvényhívások száma és százalékos aránya
  • Incl. Wall Time – beágyazott függvényekkel rendelkező függvény végrehajtási ideje
  • Excl. Wall Time – a függvény végrehajtási ideje beágyazott függvények nélkül
  • Incl. CPU - processzoridő beágyazott függvényekkel
  • Excl. CPU - processzoridő beágyazott funkciók nélkül
  • Incl. MemUse - memóriafelhasználás beágyazott függvényekkel
  • Excl. MemUse - memóriafelhasználás beágyazott függvények nélkül
  • Incl. PeakMemUse – maximális memóriafogyasztás beágyazott függvényekkel
  • Excl. PeakMemUse - maximális memóriafogyasztás beágyazott függvények nélkül

Megjegyzendő, hogy az árapályok segítségével készített jelentés vizuálisan kissé eltérhet ettől a jelentéstől, de a lényeg nem változik.

Grafikus riportok


A kód erőforrásigényes szakaszai sárga (közepes) és piros (legnehezebb) színnel vannak kiemelve. Ezek a kódrészletek, amelyek sok erőforrást használnak a program többi részéhez képest. Ez lehet egy lassú függvény vagy több gyors függvény hívása. Példánkban azt látjuk, hogy a mysqli_multi_query() függvény piros színnel van megjelölve, mert az fut a leglassabban.

Összesített jelentések

Az XHProf felület lehetővé teszi több jelentés összesített információinak egyidejű megtekintését is. Ehhez a run_id vesszővel elválasztva kerül átadásra:

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

Műszaki jellemzők

    A profilkészítő automatikus felvétele az auto_append_file és auto_prepend_file direktívák segítségével valósul meg, amelyek két végrehajtható php fájlt kapcsolnak össze:

    — az auto_append_file inicializálja a statisztikagyűjtő objektumot és megkezdi a munkáját;

    — az auto_prepend_file befejezi a statisztikák gyűjtését, és jelentésfájlt generál statisztikákkal (JSON formátumban);

    Ha az exit() vagy a die() meghívásra kerül, miközben a szkript fut, az auto_prepend_file nem kerül végrehajtásra. statisztikai fájl nem jön létreés a jelentésfájlra mutató hivatkozásokat tartalmazó blokk nem jelenik meg az oldal alján.

  1. Így a php által feldolgozott bármely oldal elérése egy új jelentésfájl létrehozását indítja el, ezért javasoljuk, hogy a statisztikák összegyűjtése után (általában néhány óra múlva) kapcsolja ki a profilkészítőt, hogy elkerülje a lemezkvóta túlcsordulását, amely a lemezkvóta létrehozása után kimerülhet. nagyszámú riport!
  2. Fontos: a profilkészítő csak akkor fog működni, ha a webhely szabványos útvonalon, automatikus úton (vagyis a hosting vezérlőpult segítségével) csatlakozik a szerverhez, ellenkező esetben fel kell vennie a kapcsolatot a Hostland műszaki támogatásával a profilkészítő konfigurálásához.
  3. Automatikus módban a profilkészítő csak a fő domain névhez csatlakozik, a profilkészítő nem kapcsolódik automatikusan az aldomainekhez.
  4. Automatikus módban a profilkészítő csak a .php és .php5 kiterjesztésű szkriptekről gyűjt statisztikákat
  5. A PHP profilozó csatlakoztatása után nem garantálható az oldal zavartalan működése, ezért ha az oldal nem működik megfelelően a profilkészítő bekapcsolt állapotában, akkor azt le kell tiltani, és a profilalkotást más módon kell folytatni.

Foglaljuk össze

Reméljük, hogy ez az eszköz segít még gyorsabbá tenni webhelyeit a Hostland tárhelyen.

A cikk részben a Den Golotyuk felhasználótól származó anyagokat használt, amelyeket a webhelyen tett közzé

Profilkészítő rendszerek segítségével információkat gyűjthetünk arról, hogy a PHP kódban mely funkciók fogyasztanak több CPU-időt és RAM-ot, azaz azonosíthatjuk a PHP program leglassabb és leginkább memóriaigényes helyeit.

xhprof

XHProf - PHP profilozó, amelyet a Facebook fejlesztett.

Telepítés:

Aptitude install php-pear pecl install xhprof-0.9.4 echo "extension=xhprof.so" > /etc/php5/mods-available/xhprof.ini ln -s /etc/php5/mods-available/xhprof.ini /etc /php5/conf.d/xhprof.ini apachectl újraindítás

A munkához szükséges fájlok a könyvtárban találhatók /usr/share/php. Viszont nem mindent, hanem csak PHP kóddal. A jelentések normál megjelenítéséhez jquery és css szükséges. Beszerezhetők a github tárolóból:

Git klón https://github.com/facebook/xhprof.git

Ezután adja hozzá a sort a PHP szkript kódjához azon a helyen, ahol az adatgyűjtést el kell kezdeni:

Xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

Az adatgyűjtés paraméterei zárójelben vannak feltüntetve. Ebben az esetben adatokat gyűjtenek a processzorterhelésről és a RAM használatáról. Még egy lehetőség lehetséges XHPROF_FLAGS_NO_BUILTINS használatakor a beépített funkciókra vonatkozó adatok nem kerülnek gyűjtésre.

$xhprof_data = xhprof_disable(); include_once "xhprof_lib/utils/xhprof_lib.php"; include_once "xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test"); echo "Jelentés: http://domain.tld/xhprof_html/index.php?run=$run_id&source=xhprof_test"; echo "\n";

Sorban $run_id Az idézőjelek a profil nevét jelölik, amely tetszőlegesen beállítható.

A feldolgozott eredmény így néz ki:

Ha megadja a paramétert XHPROF_FLAGS_NO_BUILTINS, nyilvánvaló, hogy a függvényhívások száma jelentősen csökken:

A táblázat a következő információkat tartalmazza:

Hívások- függvényhívások száma,
Fali idő- a funkció teljes működési ideje, beleértve a külső erőforrások válaszára való várakozás idejét is,
CPU- mennyi időt töltöttek a funkciók feldolgozásával,
MemUse- mennyi RAM-ot használtak fel,
PeakMemUse- csúcs memóriafogyasztás.

A módosítók a következők:

Incl- inkluzív - figyelembe véve az ebből a funkcióból származó egyéb funkciókra irányuló hívásokat,
Excl.- kizárólagos - funkcióhívások kizárása.

Ezen kívül a táblázat felett a teljes feldolgozási időről, a felhasznált memóriáról és a függvényhívások számáról is található információ.

Is XHProf lehetővé teszi, hogy különbségi jelentéseket készítsen két futás között, amelyeket piros és zöld szín jelöl. Ezekkel a jelentésekkel tiszta képet kaphat a fejlesztésekről minden kódváltás után.

Egy ilyen jelentés megszerzéséhez egy ehhez hasonló hivatkozást kell használnia:

http://domain.tld/xhprof_html/index.php?run1=run_id1&run2=run_id2&source=xhprof_test

Ahol run_id1És run_id2- indítási azonosítók.

Ha telepíted Graphviz:

Aptitude install graphviz

Vannak harmadik féltől származó webes felületek is a php profiler xhprof számára, amelyek adatbázisokat használnak:

xDebug

xDebug- PHP kód hibakereső profilalkotási lehetőséggel, írta Derick Rethans.

Telepítés:

Yum telepítse a php5-xdebug-ot

Ezután módosítjuk a konfigurációt:

Nano /etc/php5/mods-available/xdebug.ini

a sorokat hozzáadva:

Xdebug.profiler_enable = 1 xdebug.profiler_aggregate = On xdebug.profiler_output_dir = /tmp

Itt engedélyezzük a PHP profilkészítőt, és megadjuk a könyvtárat, amelyben a profilokat tároljuk. A profilok ilyen névvel jönnek létre cachegrind.out.*

Van egy webgrind webkliens: https://github.com/jokkedk/webgrind. Nem működik túl gyorsan, de lehetővé teszi a kis profilok gyors megtekintését. Valójában ez az a PHP-kód, amelyet klónozni kell a githubból:

Git klón https://github.com/jokkedk/webgrind.git

létrejön egy könyvtár webgrind, amelyet bármely webhely könyvtárába kell másolni, és a böngészőből elérni. Következő, hogy a konfigurációs fájlban a nyomtatás működjön a Debianban config.php javítania kell a végrehajtható fájl elérési útját graphviz. Így kell kinéznie:

Statikus $dotExecutable = "/usr/bin/dot";

Ezenkívül beállíthatja az időzónát:

Statikus $defaultTimezone = "Európa/Moszkva";

A fejlécben kiválaszthat egy profilt, és bejelölheti a négyzetet, hogy figyelembe vegye a beépített funkciókat. Maga a táblázat mutatja a funkciókat, a hívások számát, magának a funkciónak a működési idejét és a várakozási időt is. A függvények mélyebb megismeréséhez kattintson a háromszög alakú nyílra. Az én esetemben meglehetősen nagy profiloknál (több megabájttól) szükségtelenül sok volt a várakozás az eredményre. Valószínűleg jobb helyi megtekintési programokat használni a meglehetősen nagy profilokhoz.

A grafikon így nézhet ki:

vegye figyelembe, hogy webgrind nem használható éles szervereken, mivel nincs felhatalmazás, de elérhető a php fájl kódja. Ha szükséges, használjon legalább alapszintű Apache jogosultságot.

Vannak programok is a Linux profilok elemzésére:

A profilalkotásról

A profiladatok segíthetnek az alkalmazás fejlesztésében, azaz bizonyos célok elérésében, például a memóriafelhasználás csökkentésében, az oldalgenerálási idő csökkentésében stb.

A profilban található információ az optimalizálás kiindulópontja: megmondja, hogy mennyi ideig tart az eredmény generálása, mennyi memóriát használnak és hány függvényhívást hajtanak végre. Részletesebb adatokkal javíthatja ezeket a mutatókat.

Ha például keretrendszert használ, akkor a keretrendszer egyes funkcióinak használata több alapvető funkció meghívásához vezethet. Ha néhány adatot többször olvas, érdemes lehet az eredményt egy változóban tárolni.

A profilkészítő segíthet abban is, hogy megértse, hol kell használni a PHP-kód gyorsítótárazását, például a használatával APCu vagy gyorsítótárban.

Mindenekelőtt a legtöbb végrehajtási időt igénylő funkciókat érdemes optimalizálni. Ha minden optimalizálva van, és úgy tűnik, hogy nincs már mit javítani, érdemes a függvényeket a hívások száma szerint rendezni, és dolgozni a csökkentésén. Még ha a PHP gyors is, érdemes átgondolni, hogy kell-e ilyen gyakran függvényeket hívni?

Ha a következő helyzetekkel találkozik, fontolja meg a gyorsítótárazást:

  • A megváltoztathatatlan függvényeket hurkon belül nevezzük,
  • Egyes tartalmak kétszer jönnek létre,
  • Minden alkalommal olyan tartalom jön létre, amely nem változik,
  • A tartalom akkor is létrejön, ha nem használják fel.

Nem szabad mindent gyorsítótárban tárolni, mivel a memória is értékes erőforrás. Gyorsítótárazza a folyamatosan hozzáfért adatokat. A gyorsítótárazásnak nincs értelme, ha a gyorsítótárazás több erőforrást pazarol, mint amennyit megtakarít.

A kód gyorsítótárazásán kívül ne felejtse el a webszerver (), valamint a kliens oldalon történő gyorsítótárazását sem. Ha a megfelelő fejléceket használja, sok kérés megoldható még azelőtt, hogy elérnék a szervert.