Profilointi php. PHP-sovellusten profilointi ja virheenkorjaus xhprofilla ja FirePHP: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 manuaalisen rekisterin 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.

Sovellusprofilointi on tietojen keräämistä eri ohjelmaosien (tiedostojen ja funktioiden) suoritusnopeuksista. PHP-profilointityökaluja on saatavilla monia, mutta kaikki työkalut eivät sovellu analyysien suorittamiseen suoraan tuotantopaikalla.

XHProf ja sen haarukka Tideways on kätevä ja yksinkertainen profiloija, joka voi tehokkaasti kerätä tilastoja sovelluksen toiminnasta ilman, että sovelluksesi (tai verkkosivustosi) nopeus lähes vähenee.

Miksi profiilikoodi?

Jos sovellus alkaa toimia hitaasti (lue "sivusto alkoi hidastua"), profiloinnin avulla voit selvittää, mikä osa on hitain. Profiloinnin tuloksena on yleensä lista suoritetuista funktioista ja niiden suoritusaika.

Koodiprofiloinnin tulisi olla ensimmäinen sovellus optimointiprosessissa. Kaikki muu olisi arvailua ja todennäköisesti väärin. Sinun on tiedettävä, mikä tarkalleen aiheuttaa ongelmia ja "jarruja".

Profilointi on menettely, jolla kerätään ja järjestetään tilastoja koodin suoritusajasta. Tämä ei ole optimointi- tai ohjelmanmuutosprosessi. Tämän prosessin tulos on yleensä laajennettu raportti ohjelman komponenteista ja toimintojen suorituskykytilastoista.

Juuri tätä varten XHProf-ratkaisu kehitettiin. Se on suunniteltu toimimaan oikeilla verkkosivustoilla. Tämän profiloijan pääideana on luoda sovellukselle vähimmäiskuormitus ja samalla kerätä kaikki tarvittavat tiedot toiminnan nopeudesta. Ratkaisun ovat kehittäneet Facebookin asiantuntijat.

Kuinka yhdistää php Profiler automaattisesti?

Asiantuntijamme ovat tehneet kovasti töitä ja tehneet tästä prosessista täysin automatisoidun.
Sinun tarvitsee vain kirjautua sisään, valita haluamasi verkkotunnus "Domains"-välilehdeltä, klikata "PHP.INI + PHP Profiler" -kuvaketta ja ottaa käyttöön "Domain Profiler" -valintaruutu.

Tämän ominaisuuden käyttöönotto voi kestää jonkin aikaa, yleensä enintään 10 minuuttia.

PHP-versioissa 5.2, 5.3, 5.4, 5.5, 5.6, 7.0 käytämme XHProf-profiilia, php-versioissa 7.1 ja uudemmissa käytämme Tideways-profiilia.

Kun se on otettu käyttöön, jokaiselle PHP:n käsittelemälle sivulle rakennetaan erityinen lohko, jossa on linkkejä raporttitiedostoon (linkki näyttää suunnilleen tältä:

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

Ja tältä raporttitiedosto näyttää:

Taulukko sisältää luettelon yhdellä sivulla suoritetuista toiminnoista lisätietojen kera:

  • Puhelut - toimintokutsujen määrä ja prosenttiosuus
  • Sisältää Wall Time - sisäkkäisiä toimintoja sisältävän funktion suoritusaika
  • Ei sisällä Wall Time - toiminnon suoritusaika ilman sisäkkäisiä toimintoja
  • Sisältää CPU - prosessoriaika sisäkkäisillä toiminnoilla
  • Ei sisällä CPU - prosessoriaika ilman sisäkkäisiä toimintoja
  • Sisältää MemUse - muistin kulutus sisäkkäisillä funktioilla
  • Ei sisällä MemUse - muistin kulutus ilman sisäkkäisiä toimintoja
  • Sisältää PeakMemUse - suurin muistinkulutus sisäkkäisillä funktioilla
  • Ei sisällä PeakMemUse - suurin muistinkulutus ilman sisäkkäisiä toimintoja

On huomioitava, että vuoroveden avulla rakennettu raportti voi visuaalisesti hieman poiketa tästä raportista, mutta olemus ei muutu.

Graafiset raportit


Resurssiintensiiviset koodin osat on korostettu keltaisella (keskikokoinen) ja punaisella (raskain). Nämä ovat niitä koodin osia, jotka käyttävät paljon resursseja suhteessa muuhun ohjelmaan. Tämä voi olla yksi hidas toiminto tai useita kutsuja nopeaan funktioon. Esimerkissämme näemme, että mysqli_multi_query()-funktio on merkitty punaisella, koska se toimii hitain.

Aggregaattiraportit

XHProf-käyttöliittymän avulla voit myös tarkastella useiden raporttien koostetietoja kerralla. Tätä varten run_id välitetään pilkuilla erotettuna:

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

Tekniset ominaisuudet

    Profiloijan automaattinen sisällyttäminen toteutetaan käyttämällä auto_append_file- ja auto_prepend_file-direktiivejä, jotka yhdistävät kaksi suoritettavaa php-tiedostoa:

    — auto_append_file alustaa tilastonkeruuobjektin ja aloittaa sen työn;

    — auto_prepend_file viimeistelee tilastojen keräämisen ja luo tilastotiedon sisältävän raporttitiedoston (JSON-muodossa);

    Jos exit() tai die() kutsutaan komentosarjasi ollessa käynnissä, auto_prepend_file ei suoriteta. tilastotiedostoa ei luoda ja lohkoa, jossa on linkkejä raporttitiedostoon, ei sisällytetä sivun alareunaan.

  1. Siten pääsy mille tahansa php:n käsittelemälle sivulle käynnistää uuden raporttitiedoston luomisen, joten suosittelemme profiloijan poistamista käytöstä tilastojen keräämisen jälkeen (yleensä muutaman tunnin kuluttua), jotta vältytään levykiintiön ylivuodolta, joka saattaa kulua loppuun tiedoston luomisen jälkeen. suuri määrä raportteja!
  2. Tärkeää: profiloija toimii vain, jos sivusto on liitetty palvelimeen vakiopolun kautta automaattisesti (eli isännöinnin ohjauspaneelin avulla), muussa tapauksessa sinun on otettava yhteyttä Hostlandin tekniseen tukeen profiloijan määrittämiseksi.
  3. Automaattisessa tilassa profiloija muodostaa yhteyden vain pääverkkotunnukseen, profiloijaa ei yhdistetä automaattisesti aliverkkotunnuksiin.
  4. Automaattitilassa profiloija kerää tilastoja vain skripteistä, joiden tunniste on .php ja .php5
  5. Ei ole mahdollista taata sivuston keskeytymätöntä toimintaa PHP-profiloijan yhdistämisen jälkeen, joten jos sivusto ei toimi oikein profiloijan ollessa käytössä, se tulee poistaa käytöstä ja profilointia jatkaa muilla tavoilla.

Tehdään se yhteenveto

Toivomme, että tämä työkalu auttaa sinua tekemään sivustoistasi entistä nopeampia Hostland-isännöinnissä.

Artikkelissa käytettiin osittain verkkosivustolle lähetetyn käyttäjän Den Golotyukin materiaaleja

Balakat Obsesslav. Suf. johdettu jostakin balaka"babbler(s)", muodostettu vuorostaan ​​suf. -ak(a) alkaen "keskustelu, keskustelu" (samasta varresta, mutta sanalla suf. -l-, kuten , cm.). Sanat , pallot(monikko) "keskustelu, keskustelu" murteissa ja muissa slaaveissa. Kieli tunnetaan vielä tänäkin päivänä. cm. .

Venäjän kielen kouluetymologinen sanakirja. Sanojen alkuperä. - M.: Bustard. N. M. Shansky, T. A. Bobrova. 2004 .

Katso mitä "balakat" on muissa sanakirjoissa:

    leperrellä- puhua, jutella, raaputtaa (Dal) Katso... Synonyymien sanakirja

    VARSI- BALKAK, minä höpötän, sinä höpöttää, kypsymätön. (alue). Keskustele, puhu. Ushakovin selittävä sanakirja. D.N. Ushakov. 1935 1940… Ushakovin selittävä sanakirja

    VARSI- etelään höpöttää Perm. puhua, jutella, puhua, raaputtaa. Balakanya ke. pulista. Balakusha, balaka ob., eteläinen, balyaka perm., balakar, chatterbox, talker. Balakar, ole narri, vitsaile kuin viralliset narrit. Balakir-uros, alempi, kazakstanilainen, ... ... Dahlin selittävä sanakirja

    leperrellä- keskustele, puhu hölynpölyä, ukrainalainen. Balakati, blr. Balakat, Puola baɫakac. Löpertää tai höpöttää; katso Bernecker 1, 40; Mi. EW 5. Toinen vokaalien vuorottelun taso: ukraina. yritä mutista, puolalainen. beɫknąc – sama, tšekki. blknouti; ke Shakhmatov, ...... Max Vasmerin venäjän kielen etymologinen sanakirja

    Balakat- Nesov. trans. ja keskeytyksettä. hajoaminen Keskustele, juttele. Efraimin selittävä sanakirja. T. F. Efremova. 2000... Efremovan moderni selittävä venäjän kielen sanakirja

    leperrellä- balakat, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balakal, balakala, balakalo, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka,... . Sanojen muodot

Se osoitti, kuinka xdebug asennetaan ja määritetään, ja käsitteli joitain perusominaisuuksia, kuten var_dump()-funktion tulostuksen parantamista tai puhelupinojäljityksen tulostamista virheilmoituksen saapuessa. Toisessa osassa tarkastelimme tätä xdebug-ominaisuutta jäljittämisenä. Jäljitys sisältää kaikki kutsut ohjelman funktioille ja menetelmille, käynnistysajan, valinnaisesti muistin koon, välitetyt ja palautetut parametrit. Jäljitysloki voi auttaa sinua ymmärtämään monimutkaisen ohjelman suorituspolun. Sen sijaan, että lisäisit virheenkorjauskoodin ohjelman sisään, otat jäljityksen käyttöön tai poistat sen käytöstä tarvittaessa ja käytät sitten apuohjelmia, kuten grep tai omia PHP-sovelluksiasi lokitiedoston analysointiin.

Tässä artikkelissa tarkastellaan profilointia. Ensi silmäyksellä profilointi on samanlaista kuin jäljitys. Profilointiloki ei ole tarkoitettu ihmisille, se ei ole tarkoitettu visualisoimaan ohjelman kulkua, mutta se tarjoaa meille dataa käynnissä olevan ohjelman tilastolliseen analysointiin.

Profilointilokin luominen

Alla on lyhyt ote xdebugin luomasta profilointilokista:

fl=php:sisäinen
fn=php::define
106 3

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


Kuten näet, profilointilokia ei voi lukea suoraan. Käytämme lisätyökaluja saatujen tietojen visualisointiin ja analysointiin. Joten profilointi näyttää, kuinka monta kertaa tietty linja käynnistettiin ja kuinka kauan käynnistäminen kesti.
Profilointilokin luominen heikentää huomattavasti suorituskykyä, kuten jäljityslokin luominen, koska jokaisen rivin kulku on kuvattava. Siksi, kuten jäljityksenkin tapauksessa, älä suorita profilointia tuotantopalvelimilla... On kuitenkin tapauksia, joissa profilointi on suoritettava live-järjestelmässä. Ole tässä tapauksessa varovainen suorittaessasi xdebugia samanaikaisesti muiden Zend-laajennusten, kuten lataajien, optimoijien tai välimuistien kanssa.
Lisää, jotta xdebug aloittaa profilointilokien tallentamisen

Huomaa, että et voi suorittaa profilointia käynnistyksen yhteydessä suorittamalla komento.
Koska profilointiloki on tarkoitettu analysaattoriohjelmien luettavaksi, siinä ei ole lisäasetuksia, jotka mahdollistaisivat lisätietojen näyttämisen, kuten jäljityslokin tapauksessa. On kuitenkin joitakin asetuksia, joiden avulla voit määrittää profiloinnin, samankaltaisia ​​kuin ne, joita käytimme jäljityksen määrittämisessä.
Ensinnäkin xdebug kirjoittaa oletusarvoisesti profilointilokin /tmp-hakemistoon. Jos käytät Windowsia, sinun on korjattava php.ini seuraavasti:
xdebug.profiler_output_dir="c:\traces"

Oletusarvoisesti xdebug korvaa olemassa olevan profilointilokin. Voit määrittää sen täydentämään olemassa olevaa lisäämällä seuraavan komennon

php.ini:ssä. Joissakin tapauksissa et halua luoda profilointilokia kaikille tiedostoille, mutta samalla profiloinnin aktivointi ajon aikana on ongelmallista. Sen sijaan, että kytket profiloinnin ajoittain päälle ja pois, lisää komento
xdebug.profiler_enable_trigger=Päällä

php.ini:ssä. Nyt voit ottaa profiloinnin käyttöön ja poistaa sen käytöstä välittämällä erityisen GET- tai POST-parametrin XDEBUG_PROFILE PHP-skriptiin. Tämä mahdollistaa profiloinnin vain tälle PHP-skriptille. Tämän parametrin arvoa ei tarvitse asettaa, muista vain lisätä tämä parametri osoitteeseen test.php?XDEBUG_PROFILE.

Profilointilokin nimi

Nimi, jonka xdebug määrittää profilointilokille oletuksena on "cachegrind.out". plus prosessin tunniste. Aivan kuten jäljityslokin tapauksessa, voit muuttaa lokin nimiä lisäämällä asianmukaiset asetukset php.ini-tiedostoon. Parametrin nimi xdebug.profiler_output_name. Argumentti on merkkijono. joka voi sisältää erilaisia ​​modifikaatioita. Tärkeimmät ovat alla:

  • %p – prosessin tunniste
  • %r – satunnaisluku
  • %u - aika
  • %H – $_SERVER["HTTP_HOST"] arvo
  • %R – $_SERVER["REQUEST_URI"] arvo
  • %s – nimi sisältää koko polun, kauttaviivat muunnetaan alaviivoiksi
Huomaa, että %s-muuttajaa käytetään vain tiedostolle xdebug.profiler_output_name. Jos haluat tietää profilointilokin nimen, voit kutsua xdebug_get_profiler_filename()-funktiota.

Profilointilokin analyysi
Kuten edellä mainittiin, profilointilokin analysoimiseksi tarvitaan lisäohjelmia tietojen visualisointia varten. Kaikki xdebugin luomat profilointilokit ovat samankaltaisessa muodossa kuin Cachegrind-muoto. Cachegrind on profiloija, joka on osa tehokkaampaa ohjelmaa nimeltä Valgrind, ohjelmistojen virheenkorjaus- ja profilointiohjelma Linuxille. Cachegrind on suunniteltu analysoimaan välimuistien, muistin käytön ja ohjelmakomentojen tilastoja. Toinen Valgrind-työkalu, Callgrind, piirtää puhelukaavioita. PHP:n osalta voimme käyttää tätä sovellusta profilointilokin visualisointiin ja analysointiin.
Työkalua, jota käytetään yleisesti xdebugin luoman profilointilokin analysointiin, kutsutaan nimellä . KCachegrind on ilmainen ohjelmisto, jolla on GPL-lisenssi (toimii vain Unix-järjestelmissä). Windowsille on kuitenkin olemassa yksinkertainen ohjelma, joka on myös ilmainen. Katsotaanpa ensin Windows-versiota.

WinCacheGrind: profilointilokien analysointi Windowsissa

WinCachegrindin nykyinen versio (tämän artikkelin kirjoittajan kirjoittamana) on 1.0.0.12. Tämä versio on peräisin vuodelta 2005, mikä tarkoittaa, että WinCachegrindiä ei ole kehitetty pitkään aikaan. Jos katsot julkaisutietoja, kirjoittajat kirjoittavat, että ohjelmassa on bugeja, jotka saavat sen joskus käyttäytymään oudosti.
Siksi suosittelen KCachegrindin käyttöä, joka on käynnistetty virtuaalikoneen pohjalta uusimmassa Linux-jakelussa, esimerkiksi Ubuntu (kääntäjän huomautus yleisesti ottaen outo suositus; tässä tapauksessa suosittelen vain Linuxin asentamista, älä syrjäyttämistä). virtuaalikoneiden puutarha). Windowsissa on saatavilla valtava määrä virtuaalikoneita. Jos Unixin tai virtuaalikoneen käyttö ei jostain syystä ole mahdollista, voit jatkaa WinCachegrindin käyttöä yksinkertaiseen profilointilokianalyysiin. WinCachegrind ei piirrä kutsukaavioita, toisin kuin KCachegrind.
Wincachegrindin asentaminen on erittäin helppoa. Suorita asennusohjelma, napsauta painiketta hyväksyäksesi lisenssin ja asennus on valmis. Nyt voit ajaa ohjelman ja avata yhden xdebugin luomista välimuistin profilointilokeista.

Napsauttamalla kelloa tai sigma-kuvaketta voit vaihtaa tietojen näyttämisen välillä absoluuttisina arvoina ja prosentteina. Prosentinäyttö näyttää, kuinka paljon aikaa prosentteina kokonaisajasta kuluu funktion kutsumiseen tietyssä lohkossa.
Kaksi hyödyllistä asetusta ovat Profiler -> Piilota nopeat toiminnot ja Profiler -> Hide Library Functions. Ensimmäinen kytkin piilottaa toiminnot, joiden aikavaikutus ohjelman kokonaissuoritusaikaan on merkityksetön.
Toinen asetus, Profiler -> Hide Library Functions, piilottaa PHP:n sisäänrakennetut toiminnot yleisestä analyysistä. Kun molemmat asetukset ovat käytössä, näet vähemmän dataa, jolloin voit keskittyä optimointia vaativiin koodisi alueisiin.
Pääikkunassa on kaksi välilehteä: rivi riviltä ja Overall. Molemmat välilehdet näyttävät samat tiedot, mutta Yleistä-välilehti kokoaa tiedot paremman esityksen saamiseksi. Self time näyttää koodin käyntiajan nykyisessä lohkossa, kun taas kumulatiivinen aika (Cum.) näyttää toimintojen kokonaisajoajan tietyssä lohkossa.

KCacheGrind: profilointilokien analyysi Unixissa

KCachegrindin Unix-versio tarjoaa enemmän toimintoja kuin WinCachegrind. KCachegrind visualisoi tiedot ja rakentaa kutsukaavion.
Aloittaaksesi sen käytön, sinun on asennettava KCachegrind. Nykyinen versio . Uudempi versio (0.10.1) on saatavilla, mutta se on osa Valgrind-pakettia.
Jos mahdollista, käytä paketinhallintaa KCachegrind-paketin asentamiseen. KCachegrind käyttää GraphViziä kutsukaavioiden piirtämiseen, joten sinun on asennettava myös GraphViz-paketti, jos paketinhallinta ei asenna automaattisesti riippuvia paketteja.
Jos et löydä KCachegrindin binaaripakettia, sinun on käännettävä KCachegrind itse. Kun olet ladannut lähteet, suorita

./configure --prefix=/opt/kde3
tehdä
tee asennus

Kuten huomaat, sinun on määritettävä polku KDE-kirjaston nykyiseen asennukseen. Jos et tiedä missä KDE-kirjastot sijaitsevat järjestelmässäsi, käytä

näyttääksesi polun KDE-kirjastoihin.
Kun olet asentanut, voit suorittaa KCacheGrindin komentoriviltä

KCachegrindin tietojen taulukkoesitys on hyvin samanlainen kuin WinCachegrind. Voit myös vaihtaa absoluuttisten ja prosenttiarvojen välillä. Joitakin KCachegrindin ominaisuuksia ei ole suunniteltu PHP:lle. Alla olevassa kuvassa näkyy phpMyAdmin-ohjelman puhelukaavio:


Kuten näet, suurin osa käynnistysajasta kului common.inc.php:n sisällä. Seuraava kuvakaappaus näyttää visualisoinnin common.inc.php:n funktiokutsuista:

Tämä koodilohko suorittaa kaksi request_oncesa, mikä on puolet yhteisen.inc.php:n suorittamiseen kuluvasta ajasta. Kaksoisnapsauttamalla mitä tahansa suorakulmiota pääset syvemmälle tietojen analysointiin.

Koodin optimointi profilointitietoihin perustuen

Profiloi sovelluksesi aina ennen optimointia. Voit aloittaa optimoinnin itse paikasta, jossa sinusta tuntuu, että tämä optimointi tuo vaikutuksen, mutta tämä ei aina pidä paikkaansa. Optimointi vaikuttaa pääasiassa vain niihin osiin, jotka vievät eniten aikaa suoritusprosessissa.
Jos käytät useita ohjelman kopioita samanaikaisesti, saatat silti joutua optimoimaan sen ohjelman osan, joka vie suurimman osan suoritusajasta. Tässä tapauksessa optimointi ei nopeuta yhden yksittäisen pyynnön käsittelyä, mutta antaa palvelimelle mahdollisuuden käsitellä suuria kuormia kuluttaen samalla vähemmän resursseja pyyntöjen hoitamiseen.
Kun tarkastelet profiloijan ajon kestoja, muista, että absoluuttiset arvot ovat vähemmän tärkeitä kuin suhteelliset arvot. Eri järjestelmillä mitattuna absoluuttiset arvot voivat vaihdella. Harkitse kuitenkin seuraavia asioita, ennen kuin aloitat koodin optimoinnin.
Tärkeä optimoinnin sääntö on I/O-toimintojen määrän vähentäminen. Jotkut I/O-toiminnot ovat hyvin aikaa vieviä laskelmiin verrattuna. Tällaisten toimintojen vähentäminen voi olla erittäin tehokas tapa nopeuttaa ohjelmaa. Yhden I/O-puhelun poistaminen voi tarjota tehokkaamman parannuksen kuin useiden tuntien käyttäminen koodin optimointiin. Siksi sinun tulee keskittyä I/O-toimintoihin ennen kuin aloitat koodauksen.
Voit myös lisätä palvelimien määrää ennen optimointia. Voit ostaa valtavan, mikä lisää hieman tuottavuutta. Kehitysaika on kalliimpaa kuin uuden palvelimen hinta. Ja jos lisäät laitteiston määrää, voit olla varma, että saat lisäyksen välittömästi ilman mitään vaikutusta PHP-koodiin. Kun kehittäjä viettää yhden tai kaksi päivää koodin optimointiin, et voi koskaan tietää, kuinka paljon tuottavuus kasvaa. Ja loppujen lopuksi et voi enää olla varma, ettei optimointi aiheuta virheitä.
Joidenkin sivujen muuntaminen staattisiksi sivuiksi on yksi tapa parantaa suorituskykyä. Oletetaan, että on sivusto, jolla on paljon liikennettä, jossa PHP-skripti luo ensimmäisen sivun jokaiselle pyynnölle valitsemalla tiedot tietokannasta tai XML-tiedostosta. Jos sivun tiedot muuttuvat riittävän usein, voit luoda siitä staattisen kopion uudelleen. Jos sivun muuntaminen staattiseen näkymään ei ole mahdollista (sivulla näkyy joitakin henkilökohtaisia ​​tietoja), voit muuntaa jotkin lohkot staattisiksi näkymiksi.
Toinen optimointitaso ei vaadi PHP-koodin vaihtamista. Kuten tiedämme, PHP on tulkittu kieli. Tämä tarkoittaa, että sen komennot käännetään ajon aikana välikoodiksi. Lähetys toistetaan aina, kun käsikirjoitus suoritetaan. Tämä tekee PHP:stä hitaampaa verrattuna kieliin, kuten C tai Java, jotka eivät vaadi koodin jäsentämistä joka kerta, kun käytät sitä. PHP:ssä voit käyttää välimuotoisia esitysvälimuistia (katso käännökseni....) välikoodin tallentamiseen ja uudelleenkäyttöön, mikä nopeuttaa käynnistystä ja suorittamista.
Kaikki tämä ei tarkoita, että tämä ei ole oikea aika tai paikka PHP-koodin optimointiin. Jotkut koodin optimoinnit voivat parantaa suorituskykyä huomattavasti. Muista kuitenkin aina, että koodin vaihtaminen sisältää aina riskin lisävirheistä ja tietoturvaongelmista. Muista myös, että koodin optimointi tekee siitä vähemmän luettavan.

Johtopäätös

Profilointilokin luominen ja visualisointi on yksi tärkeimmistä PHP-koodin optimoinnin edellytyksistä. Sinun on tiedettävä, mitkä paikat ohjelmassa vievät eniten aikaa, ja siitä kannattaa aloittaa optimointi.
Seuraavassa artikkelissa tarkastelemme virheenkorjausta xdebugilla. xdebug voi tarjota sinulle mahdollisuuden etävirheenkorjaukseen. Käyttämällä asiakasohjelmaa, jolla on tämä ominaisuus, kuten Eclipse PDT, voit korjata koodisi virheitä muuttamatta sitä, asettaa keskeytyskohtia, hypätä koodin osien läpi ja nähdä, kuinka ja missä muuttujat muuttavat arvoja.

Viimeksi päivitetty: 12.01.2019

Julkaisu: 01.09.2016


PhpStormin avulla voit analysoida PHP-koodisi suorituskykyä profiloimalla sen. Profiloinnin avulla voit kerätä ohjelman suoritustilastoja: suoritettujen toimintojen nimet, kuinka monta kertaa kukin toiminto suoritettiin, kunkin toiminnon suoritusaika, mitä muita toimintoja kussakin funktiossa kutsuttiin ja niin edelleen.

Nämä tiedot voivat antaa sinulle vinkkejä siitä, missä koodiasi voidaan parantaa.

Katsotaan kuinka se toimii.

1. Edellytykset

PhpStorm IDE voi käyttää Xdebug-työkalulla kerättyjä profilointitietoja. Tämä laajennus on asennettava ja määritetty järjestelmääsi. Lisätietoja on Xdebugin asennusoppaassa.

Jos olet upean kannettavan palvelinalustan ja Open Server -ohjelmistoympäristön käyttäjä, sinun ei tarvitse tehdä mitään - Xdebug-laajennus on jo asennettu ja yhdistetty.

Huomio

Xdebug ei ole yhteensopiva IonCuben kanssa. IonCube on työkalu (apuohjelmat) PHP-ohjelmointikielellä kirjoitettujen ohjelmistojen suojaamiseen. Poista IonCube-laajennus kokonaan käytöstä tai käytä Xdebugia. Toinen mahdollinen ongelma voi olla, että Xdebug on oletusarvoisesti määritetty porttiin 9000, joka on sama portti, jota Open Server käyttää. Tämän ongelman ratkaisemiseksi sinun tulee jossakin tapauksessa muuttaa portin numero.

Kaikki tässä kuvatut toimet toistettiin oikeilla odotetuilla tuloksilla seuraavassa teknologisessa ympäristössä:

2. Ota Xdebug-profiili käyttöön

Profilointi lisää sovelluksen ajoa ja tuottaa valtavan määrän levytietoja. Siksi on parasta ottaa Xdebug-profiili käyttöön vain tarvittaessa ja poistaa se käytöstä normaaleissa olosuhteissa.

Xdebug konfiguroidaan aktiivisen php.ini-tiedoston käskyjen avulla. Aina kun otat profiloijan käyttöön, sinun on määritettävä seuraava käsky:

xdebug.profiler_output_dir = /polku/store/snapshots

Direktiivin arvon tulee määrittää polku, jota käytetään profilointitiedostojen tallentamiseen.

2.1. Globaalisti

Jotta Xdebug-profiili voidaan ottaa käyttöön maailmanlaajuisesti, sinun on käytettävä seuraavaa käskyä:

xdebug.profiler_enable = 1

Tällä tavalla profilointi suoritetaan aina, kun jokin komentosarja suoritetaan. Tätä vaihtoehtoa on kätevä käyttää profiloijan käyttöönottamiseksi vain harvoissa tapauksissa.

2.2. Käytä lisätulkkivaihtoehtoja

Voit ottaa profiloijan käyttöön käyttämällä muita tulkin parametreja Run/Debug Configurations -ikkunassa. Avaa se käyttämällä seuraavia IDE-päävalikon kohteita:

Vaihtoehto (merkitty punaisella ääriviivalla yllä olevassa kuvakaappauksessa) Tulkin asetukset (tulkkiasetukset) -osion Komentorivi (komentorivi) tulee sisältää seuraava rivi:

D xdebug.profiler_enable = 1

Tämän vaihtoehdon avulla voit käyttää profiloijaa tiettyyn kokoonpanoon, ei globaalissa mittakaavassa.

2.3. Käytä erityisiä GET/POST-parametreja tai evästetiedostoa

Hallitellumpaa profilointia varten tulisi käyttää seuraavaa ohjetta:

xdebug.profiler_enable_trigger = 1

Jos ohjeen arvoksi on asetettu 1, suoritettaessa komentosarjaa GET/POST-parametrilla tai evästeellä nimeltä XDEBUG_PROFILE, profilointi suoritetaan riippumatta xdebug.profiler_enable-asetuksesta.

Tämä profiilin käyttöönottovaihtoehto on suosituin.

3. Profilointilokien kokoelma

Jotta profilointilokeja voidaan analysoida, ne on ensin kerättävä.

3.1. Web-sovellusten profilointilokien kokoelma

Jos haluat profiloida verkkosovelluksia, käytä Xdebug-profiilia maailmanlaajuisesti tai käynnistä ja pysäytä se tarvittaessa. Kun olet käynnistänyt profiloijan, avaa sovellus selaimessa aloittaaksesi tietojen keräämisen - profilointilokit.

Kun analysoidaan suorituskykyongelmia, kirjanmerkkien tai selainlaajennusten käyttäminen virheenkorjaukseen on erittäin hyvä tapa, koska sen avulla voit navigoida sovelluksessa ja käynnistää profiloijan vain, kun suorituskykyongelma havaitaan. Näin voit kerätä kohdennettuja profilointilokeja.

3.2. Profilointilokien kokoelma CLI-sovelluksia ja yksikkötestejä varten

Voit profiloida CLI-sovelluksia ja yksikkötestejä käyttämällä Xdebug-profiloijaa maailmanlaajuisesti tai luomalla erillinen ajokokoonpano, jotta profiloija otetaan käyttöön Run/Debug Configurations -ikkunan avulla. Suorita sitten CLI-sovellus tai yksikkötestit profilointitietojen keräämiseksi.

Kun analysoidaan yksikkötestien suorituskykyongelmia, hyvä lähestymistapa on luoda erillinen konfiguraatio, joka suorittaa vain ne yksikkötestit, joissa epäillään olevan suorituskykyongelmia. Näin voit kerätä kohdennettuja profilointilokeja.

4. Profilointilokin kuvauksen analyysi

Katsotaanpa tarkemmin profilointilokia.

4.1. Profilointilokin avaaminen

Avaa profilointiloki käyttämällä seuraavia IDE-päävalikon kohtia: .

Jos käytät upeaa kannettavaa palvelinalustaa Open Server, voit myös käyttää monialustatyökalua Webgrind tarkastellaksesi profilointilokia. Se löytyy seuraavista Open Server -päävalikon kohdista [Lisäasetukset → PHP-profiili].

Profilointilokit tallennetaan kansioon määritetyn xdebug.profiler_output_dir-direktiivin mukaisesti. Luotu tiedoston nimi alkaa aina cachegrind.out. ja päättyy joko PHP- tai verkkopalvelimen prosessitunnukseen tai sen hakemiston crc32-hajakoodiin, jossa profiloitu komentosarja sijaitsee.


4.2. Suoritustilastot-välilehti

Suoritustilastot-välilehdessä voit tarkastella yhteenvetotietoja kunkin kutsutun funktion suoritusmittareista. Näet kaikki tiedostot, funktiokutsut, kuinka monta kertaa niitä on kutsuttu ja kunkin funktion suoritusaika (absoluuttinen ja suhteellinen).

Yläruudukko näyttää erilaisia ​​mittareita:

  • Oma aika - aika, jonka funktio käyttää koodinsa suorittamiseen (ottamatta huomioon muiden toimintojen kutsuja).

Alimmassa ruudukossa näkyy kaksi välilehteä: Soitetut - toiminnot, joita skripti kutsuu täällä, ja Soittajat - joista komentosarja kutsuttiin. Täällä voit nähdä erilaisia ​​mittareita:

  • Aika - kokonaissuoritusaika.
  • Puhelut - puheluiden määrä.

Toiminnot, joilla on pitkä suoritusaika tai suuri määrä puheluita, vaativat varmasti testausta.

4.3. Call Tree Tab

Puhelupuu-välilehti näyttää koodisi suorituspolut. Täältä näet tarkempia tietoja kunkin toiminnon suoritusajasta ja niin edelleen.

Yläruudukko näyttää kutsupuut (joita kutsutaan muissa funktioissa) ja muita mittareita:

  • Kutsuttava (kutsuttu tiedosto) - tiedosto, joka suoritettiin.
  • Aika - kokonaissuoritusaika.
  • Puhelut - puheluiden määrä.

Alimmassa ruudukossa on kaksi välilehteä: Soitetut - toiminnot, joita kutsutaan tässä, ja Soittajat - joista toimintoa kutsutaan. Täällä voit nähdä erilaisia ​​mittareita:

  • Kutsuttava (kutsuttu toiminto) - toiminto, joka on suoritettu.
  • Aika - kokonaissuoritusaika.
  • Puhelut - puheluiden määrä.

Kontrollikysymykset

  1. Miksi PHP-sovellukset profiloidaan?
  2. Kuinka monta päätapaa on mahdollista ottaa Xdebug-profiili käyttöön?
  3. Mikä on paras tapa edetä profiloitaessa CLI-sovelluksia ja yksikkötestejä?
  4. Mitä työkaluja voidaan käyttää profilointilokien analysointiin?
  5. Mihin mittareihin kannattaa kiinnittää ensiksi huomiota profilointilokia analysoitaessa?

Aiheeseen liittyviä julkaisuja