PHP:n profilointi XHprofilla. PHP-sovellusten profilointi PhpStormilla ja Xdebugilla Profilointilokin avaaminen

xhprof:n asentaminen php:lle:

Sudo apt-get install php5-xhprof

Käynnistä Apache uudelleen:

Sudo-palvelu apache2 käynnistyy uudelleen

Tulosta phpinfo(); ja tarkista onko moduuli kytketty vai ei?

Tarkistamme /etc/php5/apache2/conf.d nähdäksemme, näkyykö siellä linkki xhprof.ini-konfiguraatioon.

Jos ei, luo linkki itse ja käynnistä Apache uudelleen.

Sudo ln -s /etc/php5/mods-available/xhprof.ini /etc/php5/apache2/conf.d/20-xhprof.ini sudo-palvelu apache2 käynnistyy uudelleen

Tarkistamme xhprof-yhteyden, tarkistamme, onko 20-xhprof.ini kytketty:

Kuvakaappauksessa näkyy versio 0.9.2, vaikka asennuksen aikana näytettiinkin versio 0.9.4, mutta tämä ei ole meille este.

Nyt voimme profiloida koodimme.

  1. Ota profilointi käyttöön sivun alussa käyttämällä xhprof_enable();
  2. Poista sivun lopussa profilointi käytöstä komennolla xhprof_disable() ja tallenna kerätyt tiedot komennolla save_run();
  3. Seuraavaksi analysoimme.

Toiminto xhprof_enable() ottaa liput argumentteina:

XHPROF_FLAGS_CPU prosessoritilastojen tallentamiseen,

XHPROF_FLAGS_MEMORY - muistia varten,

XHPROF_FLAGS_NO_BUILTINS - sisäänrakennettujen toimintojen huomioiminen.

Tallentaaksemme ja saadaksemme lisäselvityksiä meidän on asennettava profiilianalyysityökalu.

Lataa arkisto analyysityökalulla xhprof: -sivulta, ota versio 0.9.4.

Luo palvelimelle tai paikalliselle PC:lle kansio, johon pääset localhostin tai erillisen toimialueen kautta, johon puramme ladatun arkiston:

Nyt voimme tallentaa profiilin.

https://xn--d1acnqm.xn--j1amh/altadmin/posts/edit/188

Seurantakoodi näyttää suunnilleen tältä:

// Alusta profiloija - laskemme sekä prosessorin ajan että muistin kulutuksen xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
// Profiloitu koodi # Pysäytä profiloija $xhprof_data = xhprof_disable(); # Tallenna raportti ja luo linkki sen katselemiseksi include_once "/var/www/html/xhprof-0.9.4/xhprof_lib/utils/xhprof_lib.php"; include_once "/var/www/html/xhprof-0.9.4/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_ajo->tallenna_ajo($xhprof_data, "xhprof_test"); echo "Raportti: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=$run_id&source=xhprof_test"; kaiku "\n";

/var/www/html/xhprof-0.9.4 - polku kansioon, johon purimme tarvitsemamme kirjastot.

Raportti: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=57c32f3095d21&source=xhprof_test

Profiilianalyysi näyttää tältä. Tämä taulukko näyttää kaikki profiloidut toimintokutsut.

Voimme lajitella funktiot napsauttamalla taulukon otsikoita.

Kun näemme, että jotain funktiota suoritetaan useita kertoja tai hyvin pitkään, voimme napsauttaa tätä funktiota ja samanlainen taulukko avautuu, mutta sisäisillä kutsuilla kyseisen funktion ja sen pääympäristön sisällä, jossa funktiota kutsuttiin.

Indikaattorit:
Total Inc. Wall Time (toimintojen suorittamiseen käytetty aika, kun otetaan huomioon vastausten odottaminen pistokkeista, tiedostojärjestelmästä ja muista resursseista)
Total Inc. CPU (toimintojen suorittamiseen käytetty aika)
Total Inc. MemUse (muistin käyttö)
Total Inc. PeakMemUse (huippumuistin käyttö)
Toimintokutsujen määrä

On myös mahdollisuus näyttää raportti graafisesti. Mutta tehdäksesi tämän, sinun on varmistettava, että sinulla on asennettuna graphviz-kirjasto:

Apt-get install graphviz

Sitten sinun on napsautettava profiilissasi näyttääksesi ja voila:

Nyt voit analysoida ja parantaa koodia.

Profilointijärjestelmien avulla voit kerätä tietoa siitä, mitkä funktiot PHP-koodissa kuluttavat enemmän CPU-aikaa ja RAM-muistia, eli tunnistaa PHP-ohjelman hitaimmat ja eniten muistia vaativat paikat.

xhprof

XHProf - Facebookin kehittämä PHP-profiili.

Asennus:

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 käynnistyy uudelleen

Työhön tarvittavat tiedostot sijaitsevat hakemistossa /usr/share/php. Ei kuitenkaan kaikkea, vaan vain PHP-koodilla. Raporttien normaaliin näyttämiseen tarvitaan jquery ja css. Ne löytyvät github-arkistosta:

Git-klooni https://github.com/facebook/xhprof.git

Lisää tämän jälkeen rivi PHP-skriptikoodiin kohtaan, josta tiedonkeruun pitäisi alkaa:

Xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

Tiedonkeruun parametrit on merkitty suluissa. Tässä tapauksessa tietoja kerätään prosessorin kuormituksesta ja RAM-muistin käytöstä. Vielä yksi vaihtoehto on mahdollinen XHPROF_FLAGS_NO_BUILTINS käytettäessä tietoja sisäänrakennetuista toiminnoista ei kerätä.

$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_ajo->tallenna_ajo($xhprof_data, "xhprof_test"); echo "Raportti: http://domain.tld/xhprof_html/index.php?run=$run_id&source=xhprof_test"; kaiku "\n";

Linjassa $run_id Lainausmerkit osoittavat profiilin nimen, joka voidaan asettaa mielivaltaisesti.

Käsitelty tulos näyttää tältä:

Jos määrität parametrin XHPROF_FLAGS_NO_BUILTINS, on selvää, että toimintokutsujen määrä vähenee merkittävästi:

Taulukko sisältää seuraavat tiedot:

Puhelut- toimintokutsujen määrä,
Wall Time- toiminnon kokonaiskäyttöaika, mukaan lukien ulkoisten resurssien vastausta odottaessa käytetty aika,
prosessori- kuinka paljon aikaa kului toimintojen käsittelyyn,
MemUse- kuinka paljon RAM-muistia käytettiin,
PeakMemUse- muistin huippukulutus.

Modifioijat ovat:

Sisältää- mukaan lukien - ottaa huomioon tämän toiminnon kutsut muihin toimintoihin,
Ei sisällä- yksinomainen - pois lukien funktiokutsut.

Lisäksi taulukon yläpuolella on tietoa kokonaiskäsittelyajasta, käytetystä muistista ja toimintokutsujen määrästä.

Myös XHProf voit luoda eroraportteja kahden ajon välillä, jotka on merkitty punaisella ja vihreällä värillä. Näiden raporttien avulla saat selkeän kuvan parannuksista jokaisen koodinvaihdon jälkeen.

Saadaksesi tällaisen raportin sinun on käytettävä seuraavaa linkkiä:

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

Missä run_id1 Ja run_id2- laukaisutunnisteet.

Jos asennat Graphviz:

Aptitude asennus graphviz

Php Profiler xhprof -sovellukselle on myös kolmannen osapuolen verkkokäyttöliittymiä, jotka käyttävät tietokantoja:

xDebug

xDebug- PHP-koodin debuggeri profilointitoiminnolla, kirjoittanut Derick Rethans.

Asennus:

Yum asenna php5-xdebug

Sitten muokkaamme konfiguraatiota:

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

lisäämällä siihen rivit:

Xdebug.profiler_enable = 1 xdebug.profiler_aggregate = Käytössä xdebug.profiler_output_dir = /tmp

Tässä otamme PHP-profiilin käyttöön ja määritämme hakemiston, johon profiilit tallennetaan. Profiilit luodaan nimillä, kuten cachegrind.out.*

On webgrind-verkkoasiakasohjelma: https://github.com/jokkedk/webgrind. Se ei toimi kovin nopeasti, mutta sen avulla voit tarkastella pieniä profiileja nopeasti. Itse asiassa tämä on PHP-koodi, joka on kloonattava githubista:

Git-klooni https://github.com/jokkedk/webgrind.git

luodaan hakemisto webgrind, joka sinun on kopioitava minkä tahansa verkkosivuston hakemistoon ja käytettävä sitä selaimella. Seuraavaksi, jotta määritystiedostoon piirtäminen toimisi Debianissa config.php sinun on korjattava suoritettavan tiedoston polku graphviz. Sen pitäisi näyttää tältä:

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

Lisäksi voit säätää aikavyöhykettä:

Staattinen $defaultTimezone = "Eurooppa/Moskova";

Otsikossa voit valita profiilin ja valita ruudun ottaaksesi huomioon sisäänrakennetut toiminnot. Itse taulukosta näkyy toiminnot, puheluiden määrä, itse toiminnon toiminta-aika ja aika mukaan lukien odotus. Voit mennä syvemmälle funktioihin napsauttamalla kolmionmuotoista nuolta. Minun tapauksessani melko suurilla profiileilla (useita megatavuja) tuloksen odotus oli tarpeettoman pitkä. On luultavasti parempi käyttää paikallisia katseluohjelmia melko suurille profiileille.

Kaavio voi näyttää tältä:

ota huomioon, että webgrind ei tule käyttää tuotantopalvelimilla, koska valtuutusta ei ole annettu, mutta php-tiedostokoodiin pääsee käsiksi. Käytä tarvittaessa vähintään Apachen perusvaltuutusta.

Linuxissa on myös profiilien analysointiohjelmia:

Tietoja profiloinnista

Profiilitiedot voivat auttaa sinua parantamaan sovellustasi eli saavuttamaan tiettyjä tavoitteita, esimerkiksi vähentämään muistin kulutusta, lyhentämään sivujen luomisaikaa ja niin edelleen.

Profiilin tiedot ovat optimoinnin lähtökohta: se kertoo kuinka kauan tuloksen luominen kestää, kuinka paljon muistia käytetään ja kuinka monta funktiokutsua tehdään. Yksityiskohtaisempien tietojen avulla voit parantaa näitä mittareita.

Jos esimerkiksi käytät viitekehystä, joidenkin kehyksen toimintojen käyttö voi johtaa useiden perustoimintojen kutsumiseen. Jos luet joitakin tietoja useita kertoja, saattaa olla syytä tallentaa tulos muuttujaan.

Profiloija voi myös auttaa ymmärtämään, missä käytetään PHP-koodin välimuistia, esimerkiksi käyttämällä APCu tai muistissa.

Ensinnäkin kannattaa optimoida toiminnot, jotka vaativat eniten suoritusaikaa. Kun kaikki on optimoitu ja näyttää siltä, ​​että parannettavaa ei ole enää jäljellä, kannattaa lajitella toiminnot puheluiden määrän mukaan ja pyrkiä vähentämään sitä. Vaikka PHP on nopea, kannattaa miettiä, pitääkö funktioita kutsua niin usein?

Jos kohtaat seuraavat tilanteet, sinun tulee harkita välimuistiin tallentamista:

  • Muuttumattomia funktioita kutsutaan silmukan sisällä,
  • Osa sisällöstä luodaan kahdesti,
  • Sisältöä, joka ei muutu, syntyy joka kerta,
  • Sisältöä luodaan, vaikka sitä ei käytettäisikään.

Kaikkea ei kannata tallentaa välimuistiin, sillä muisti on myös arvokas resurssi. Tallenna jatkuvasti käyttämäsi tiedot välimuistiin. Välimuistissa ei myöskään ole mitään järkeä, jos välimuisti tuhlaa enemmän resursseja kuin säästää.

Koodin välimuistiin tallentamisen lisäksi älä unohda välimuistiin tallentamista verkkopalvelimen () sekä asiakaspuolen avulla. Jos käytät oikeita otsikoita, monet pyynnöt voidaan ratkaista ennen kuin ne edes saapuvat palvelimelle.

PHP-koodin profilointi

Ennemmin tai myöhemmin jokainen meistä kohtaa vanhan koodin ja sen optimoinnin. Tällaisessa tilanteessa debuggeri ja profiloija ovat ohjelmoijan parhaat avustajat. PHP:n kanssa työskenteleville Derick Rethansin ansiosta on hyvä työkalu - xDebug. Myös RuNetissä on paljon tietoa xDebugista, joten tämä artikkeli ei käsittele sitä.

Kun törmäsin mainitsemiseen PHP:n profiloijasta, ajattelin heti xDebugia (Olin kauan sitten unohtanut Zendin omat työkalut), mutta tällä kertaa olin väärässä - puhumme XHProfista.
XHProf

Tämä profiloija on kehitetty erityisesti Facebookia varten, ja sen lähdekoodi avattiin maaliskuussa 2009.

Asennus sujui melko nopeasti ja mutkattomasti.
wget pecl.php.net/get/xhprof-0.9.2.tgz
tar xvf xhprof-0.9.2.tgz
cd xhprof-0.9.2/extension/
phpize
./configure && tee && tee asennus
cd /usr/local/etc/php.d/
vim xhprof.ini
cd /usr/local/
vim header.php
vimfooter.php
vim etc/php.ini
/etc/init.d/php-fpm käynnistyy uudelleen
cp vhost.conf.template prof.my.conf
sed -i s/site/prof/ prof.my.conf
vim prof.my.conf
/etc/init.d/nginx käynnistyy uudelleen

Analysoidaan mainitut konfiguraatiot

Xhprof.ini
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xhprof.so
xhprof.output_dir="/home/max/www/profile/"

Prof.my.conf - Nginx config - tavallisin.

Palvelin (
kuuntele 80;
palvelimen_nimi prof.my;
merkkisarja utf8;

Root /usr/local/src/xhprof-0.9.2/xhprof_html ;
sijainti/(
indeksi index.php;
}

Sijainti ~ \.php$ (
fastcgi_pass 127.0.0.1:12000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/src/xhprof-0.9.2/xhprof_html/$fastcgi_script_name;
sisältää fastcgi_params;

Tiedostossa /usr/local/src/xhprof-0.9.2/xhprof_html on PHP-lähteitä, jotka luovat hyvän WEBGUI:n profiloijalle.

Joten kahdesta päätiedostosta:

Header.php


include_once "/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_lib.php";
include_once "/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_runs.php";
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
}

Footer.php
if(isset($_COOKIE["xhprof"]))(
if (extension_loaded("xhprof")) (
$profiler_namespace = "omasovellus"; // sovelluksesi nimiavaruus
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_ajo->tallenna_ajo($xhprof_data, $profiilin_nimiavaruus);

// url XHProf UI -kirjastoihin (vaihda isäntänimi ja polku)
$profiler_url = sprintf("http://prof.my/index.php?run=%s&source=%s", $run_id, $profiilin_nimiavaruus);
kaiku<<Profiler-tulostus
OUT;
}
}

Nyt suoritamme minkä tahansa PHP-skriptin verkon kautta ja näemme vasemmassa yläkulmassa linkin profilerin tuotteeseen - juuri tätä varten isäntä prof.my luotiin

Huomaa - käytän COOKIE-tarkistusta! Tällaisella tarkistuksella voit käyttää profiloijaa turvallisesti tuotantopalvelimella - todellisella tiedolla ja todellisella kuormalla.

Profiloijan verkkokäyttöliittymä näyttää kylttejä, joissa on tietoja kustakin toiminnosta, ja raportoi seuraavat tiedot:

  • Jokaisen toiminnon kutsujen määrä
  • Wall-aika, toimintojen suorittamiseen käytetty aika (mukaan lukien vastausten odottaminen pistokkeista, tiedostojärjestelmästä jne.).
  • CPU-aika, toimintojen suorittamiseen käytetty aika (pois lukien vastausten odottaminen socketeista, tiedostojärjestelmästä jne.).
  • Muistin käyttö
  • Huippumuistin käyttö

Taulukko on mahdollista lajitella minkä tahansa parametrin mukaan

Jokaisen toiminnon tiedot on jaettu kahteen muuhun tyyppiin: Inclusive ja Exclusive. Inclusive sisältää lapsipuheluiden käyttämät numerot, kun taas Exclusive ei sisällä niitä. Voit myös napsauttaa funktion nimeä nähdäksesi tiedot vain siitä ja funktioista, joista se on kutsuttu ja mitä se kutsui.

Jos GraphViz on asennettu järjestelmään, profiloija piirtää puhelukaavion puolestasi.

P.S. Perinteitä rikkomatta: tämä on ensimmäinen postaukseni Habreen.

UPD: julkaistu uudelleen PHP:llä.


Joskus ViewProfile.swf ja muut SWF -järjestelmävirheet voivat johtua Windowsin rekisteriongelmista. Useat ohjelmat voivat käyttää ViewProfile.swf -tiedostoa, mutta kun kyseiset ohjelmat poistetaan tai niitä muutetaan, joskus "orpoja" (virheellisiä) SWF-rekisterimerkintöjä jää jälkeen.

Pohjimmiltaan tämä tarkoittaa, että vaikka tiedoston todellinen polku on saattanut muuttua, sen väärä aiempi sijainti tallennetaan edelleen Windowsin rekisteriin. Kun Windows yrittää etsiä näitä vääriä tiedostoviittauksia (tiedoston sijainti PC:llä), ViewProfile.swf -virheitä saattaa tapahtua. Lisäksi haittaohjelmistot voivat vioittaa Bioshock 2 -ohjelmistoon liittyviä rekisterikohteita. Siksi nämä vialliset SWF-rekisterimerkinnät täytyy korjata ongelman korjaamiseksi juuressa.

Windows-rekisterin muokkaaminen käsin virheellisten ViewProfile.swf -osioiden poistamiseksi ei ole suositeltua, ellet ole tietokoneammattilainen. Rekisterin muokkaamisen yhteydessä tehdyt virheet voivat tehdä tietokoneestasi käyttökelvottoman ja aiheuttaa korjaamatonta vahinkoa käyttöjärjestelmällesi. Itse asiassa jopa yksi väärään paikkaan asetettu pilkku voi estää tietokonettasi käynnistymästä!

Tämä riskin takia suosittelemme luotettavan rekisterin puhdistusohjelmiston käyttöä, kuten WinThruster (Microsoft Gold Partnerin kehittämä), rekisterin skannaukseen ja ViewProfile.swf-ongelmien korjaamiseen. Rekisterinpuhdistajan avulla voit automatisoida viallisten rekisteriarvojen, puuttuvien tiedostoviitteiden (kuten mikä aiheuttaa ViewProfile.swf -virheen), ja rikkinäisten linkkien löytämisen rekisterissä. Ennen jokaista skannausta luodaan automaattisesti varmuuskopio, jonka avulla voit kumota muutokset yhdellä napsautuksella ja suojata tietokonettasi mahdollisilta vaurioilta. Parasta on, että rekisterivirheiden poistaminen voi parantaa järjestelmän nopeutta ja suorituskykyä merkittävästi.


Varoitus: Ellet ole kokenut tietokoneen käyttäjä, emme suosittele Windowsin rekisterin manuaalista muokkaamista. Rekisterieditorin virheellinen käyttö voi aiheuttaa vakavia ongelmia, jotka saattavat edellyttää Windowsin uudelleenasentamista. Emme takaa, että rekisterieditorin virheellisestä käytöstä aiheutuvat ongelmat voidaan korjata. Käytät Rekisterieditoria omalla vastuullasi.

Ennen kuin korjaat Windowsin rekisterin manuaalisesti, sinun on luotava varmuuskopio viemällä osa ViewProfile.swf-tiedostoon liittyvästä rekisteristä (esim. Bioshock 2):

  1. Napsauta painiketta Alkaa.
  2. Tulla sisään " komento"V hakupalkki... ÄLÄ NAPSAUTA VIELÄ TULLA SISÄÄN!
  3. Kun pidät näppäimiä painettuna CTRL-Shift paina näppäimistöltäsi TULLA SISÄÄN.
  4. Näyttöön tulee valintaikkuna pääsyä varten.
  5. Klikkaus Joo.
  6. Musta laatikko avautuu vilkkuvalla kohdistimella.
  7. Tulla sisään " regedit" ja paina TULLA SISÄÄN.
  8. Valitse Rekisterieditorissa ViewProfile.swf liittyvä avain (esim. Bioshock 2), jonka haluat varmuuskopioida.
  9. valikossa Tiedosto valitse Viedä.
  10. Listalla Tallenna kohteeseen Valitse kansio, johon haluat tallentaa Bioshock 2 -varmuuskopion.
  11. Kentällä Tiedoston nimi Anna varmuuskopiotiedoston nimi, esimerkiksi "Bioshock 2 -varmuuskopio".
  12. Varmista kenttä Vientialue arvo valittu Valittu haara.
  13. Klikkaus Tallentaa.
  14. Tiedosto tallennetaan .reg.
  15. Sinulla on nyt varmuuskopio ViewProfile.swf liittyvästä rekisterikohdasta.

Seuraavia rekisterin manuaalisen muokkaamisen vaiheita ei kuvata tässä artikkelissa, koska ne voivat vahingoittaa järjestelmääsi. Jos haluat lisätietoja rekisterin manuaalisesta muokkaamisesta, tutustu alla oleviin linkkeihin.

PHP-laajennus nimeltä Xdebug on saatavana auttamaan PHP-sovellusten profiloinnissa sekä ajonaikaisessa virheenkorjauksessa. Profiloijaa suoritettaessa tulos kirjoitetaan tiedostoon binäärimuodossa nimeltä "cachegrind". Jokaisella alustalla on saatavilla sovelluksia näiden tiedostojen analysoimiseksi. Sovelluskoodin muutoksia ei tarvita tämän profiloinnin suorittamiseksi.

Ota profilointi käyttöön asentamalla laajennus ja säätämällä php.ini-asetuksia. Joissakin Linux-jakeluissa on vakiopaketteja (esim. Ubuntun php-xdebug-paketti). Esimerkissämme käytämme profiilia valinnaisesti pyyntöparametrin perusteella. Tämä antaa meille mahdollisuuden pitää asetukset staattisina ja käynnistää profiilin vain tarpeen mukaan.

# php.ini settings # Aseta arvoksi 1, jos haluat ottaa sen käyttöön jokaisessa pyynnössä. xdebug.profiler_enable = 0 # Käytetään GET/POST-parametria profilerin kytkemiseksi päälle xdebug.profiler_enable_trigger = 1 # Välitettävä GET/POST-arvo mille tahansa arvolle xdebug.profiler_enable_trigger_value = "" # Tulosta välimuistitiedostot tiedostoon /tmp, jotta järjestelmämme puhdistaa ne myöhemmin. xdebug.profiler_output_dir = "/tmp" xdebug.profiler_output_name = "cachegrind.out.%p"

Tee seuraavaksi verkkoasiakasohjelmalla pyyntö sovelluksesi URL-osoitteelle, jonka haluat profiloida, esim.

Http://example.com/article/1?XDEBUG_PROFILE=1

Kun sivu käsitellään, se kirjoittaa tiedostoon, jonka nimi on samanlainen kuin

/tmp/cachegrind.out.12345

Oletusarvoisesti tiedostonimen numero on sen kirjoittanut prosessitunnus. Tämä on määritettävissä xdebug.profiler_output_name-asetuksella.

Huomaa, että se kirjoittaa yhden tiedoston jokaista suoritettua PHP-pyyntöä/prosessia kohden. Jos esimerkiksi haluat analysoida lomakeviestiä, GET-pyynnölle kirjoitetaan yksi profiili HTML-lomakkeen näyttämiseksi. Parametri XDEBUG_PROFILE on välitettävä seuraavaan POST-pyyntöön toisen lomakkeen käsittelevän pyynnön analysoimiseksi. Siksi profiloinnissa on joskus helpompaa ajaa curl POST-lomakkeeseen suoraan.

Tulosten analysointi

Kun profiilin välimuisti on kirjoitettu, se voidaan lukea sovelluksella, kuten tai Webgrind. PHPStorm, suosittu PHP IDE, voi myös näyttää nämä profilointitiedot.

Esimerkiksi KCachegrind näyttää tietoja, kuten:

  • Toiminnot suoritettu
  • Puheluaika, sekä itse että myöhemmät toimintokutsut mukaan lukien
  • Kunkin funktion kutsujen lukumäärä
  • Puhelukaaviot
  • Linkit lähdekoodiin

Mitä etsiä

Ilmeisesti suorituskyvyn viritys on hyvin erityistä kunkin sovelluksen käyttötapauksille. Yleensä on hyvä etsiä:

  • Toistuvat kutsut samalle funktiolle, joita et odottaisi näkeväsi tietoja käsitteleville ja kyseleville funktioille, nämä voivat olla sovelluksesi ensisijaisia ​​mahdollisuuksia välimuistiin.
  • Hitaasti toimivat toiminnot. Missä sovellus viettää suurimman osan ajastaan? Paras tulos suorituskyvyn virittämisessä on keskittyminen niihin sovelluksen osiin, jotka kuluttavat eniten aikaa.

Huomautus: Xdebug ja erityisesti sen profilointiominaisuudet ovat erittäin resurssivaltaisia ​​ja hidastavat PHP:n suorittamista. Näitä ei suositella suoritettavaksi tuotantopalvelinympäristössä.