SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
Profiling PHP
             Applications


Sam Keen
@samkeen
pdxphp.org: May 2009 Meeting
Summary
•   Huge topic, so we will settle on one aspect
    of it
•   Concentrate on the Code aspect of
    profiling
•   We’ll concern ourselves more with ‘tools
    to get started’ rather than ‘Preferment
    code best practices’ (see last slide for that)
•   Will introduce a ‘secret ingredient’ that
    makes profiling super delicious!
The Scenario

You build a killer PHP site


Works great out of the gate
but then slowly degrades as
more people use it until...
How do we avoid this

  Or at least lesson the chance of it happening or at a
minimum reduce the amount of “material” hitting the fan
                when it inevitably occurs
Profiling



                -       should be done during development
                -       allows you to spot inefficiencies and
                        bottlenecks in code rather than your
                        clients
Photo: http://www.flickr.com/photos/chermida/2913511936/
Facilitating Profiling
    During Development

•   Make it as easy as possible to set up and
    use
•   This way it can become part of your daily
    (OK, maybe weekly) routine.
Many Aspects of
   Profiling

   Code       Db

   System   Network
  CPU/RAM
First steps for Db and
        System/Network
Query logs: slow and index-less

top, vmstat, dstat
$ dstat




@see http://dag.wieers.com/home-made/dstat
Profiling Code
               -Baseline-
Before you make changes, you need to get some sort of
    baseline of the performance of the application

    Otherwise, you cannot measure improvement



      So start with profiling the site as a “whole”
Web Server
       Profiling Tools
                   Apache Bench
                   HTTP_load
                   Siege




Web Server
HTTP_Load
Install
wget http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz
tar -xzf http_load-12mar2006.tar.gz
cd http_load-12mar2006/
make
sudo make install




@see eZ Publish article for coverage of the others: http://bit.ly/sKYha
http://ez.no/developer/articles/ez_publish_performance_optimization_part_1_of_3_introduction_and_benchmarking
HTTP_Load
After creating for URL file (simple txt file with list o URLs
(one per line) that will be randomly chosen from by
http_load)

The run something like: (runs for ten seconds, with five
parallel requests)


    $ http_load -parallel 5 -seconds 10 urls.txt
HTTP_Load
Output
$ http_load -parallel 5 -seconds 10 urls.txt
90 fetches, 5 max parallel, 805770 bytes, in 10 seconds
8953 mean bytes/connection
8.99999 fetches/sec, 80576.9 bytes/sec
msecs/connect: 241.704 mean, 958.418 max, 73.01 min
msecs/first-response: 252.075 mean, 1067.61 max, 83.833 min
HTTP response codes:
  code 200 -- 90
Xdebug Profiling
Far more than just a profiler:
  * stack traces and function traces in error messages with:
       o full parameter display for user defined functions
       o function name, file name and line indications
       o support for member functions
  * memory allocation
  * protection for infinite recursions
  * profiling information for PHP scripts
  * code coverage analysis
  * debug your scripts interactively with a debug client

@see xdebug.org
Xdebug Install
@see http://www.xdebug.org/docs/install

Install with pecl
sudo pecl install xdebug


Add this line to your php.ini
zend_extension=quot;/usr/local/php/modules/xdebug.soquot;
Xdebug Configure
;##### START XDEBUG SECTION ######;
zend_extension=/usr/lib/php/extensions/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handle=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.profiler_enable = 1
xdebug.profiler_output_name = cachegrind.out.%t-%s
xdebug.profiler_output_dir=quot;/Users/sam/grind-outquot;
;##### END XDEBUG SECTION ######;



http://www.xdebug.org/docs/all_settings#profiler_output_name
Xdebug Local Setup
php.ini@ -> /usr/local/php5/lib/php.ini.zenddebug
php.ini.xdebug
php.ini.xdebug.profile
php.ini.zenddebug


~/bin (in my PATH)
-rwxr-xr-x@   php-xdebug*
-rwxr-xr-x@   php-xdebug-profile*
-rwxr-xr-x@   php-zenddebug*


Contents of        php-xdebug-profile
#!/bin/sh
rm /usr/local/php5/lib/php.ini
ln -s /usr/local/php5/lib/php.ini.xdebug.profile /usr/local/php5/lib/php.ini
sudo apachectl restart


$ php-xdebug-profile
Now running php with Xdebug PROFILE: hurray for open source
Profiling a specific page
With Xdebug profiling enabled

Simply request the web page in question using browser

Look in your xdebug.profiler_output_dir for output
    cachegrind.out.1242152836-_Library_WebServer_Documents_persist_better_see_signups_php
Examine the output

•   Traditionally: Kcachegrind
•   Install on Linux, or Windows: easy
•   Install on OSX: #&^!*&^!!


•   The Kcachegrind UI...
And the Secret
  Ingredient
Webgrind

Webgrind is an Xdebug profiling web frontend in PHP5

@see http://code.google.com/p/webgrind/

Simple Installation on any platform that can run
WebServer/PHP5 stack

and the UI...
Webgrind Install
Install (Typical WebApp install: put the folder in your webroot
and edit a config file)

 1. Download to your web root




 * edit config.php
 * be sure $storageDir is writable by web server
Extend UI
UI is HTML and js (jquery) so trivial to make changes
The victim
http://local.persist.com/could_improve/
BaseLine
$ http_load -parallel 5 -seconds 10 urls_could_improve.txt
1928 fetches, 5 max parallel, 1.92362e+07 bytes, in 10.0002 seconds
9977.27 mean bytes/connection
192.796 fetches/sec, 1.92358e+06 bytes/sec
msecs/connect: 0.456549 mean, 9.326 max, 0.055 min
msecs/first-response: 21.7894 mean, 599.711 max, 0.862 min
HTTP response codes:
  code 200 -- 1928




 *you would also be watching CPU and RAM with something like
 dstat during this test to determine if we are CPU and/or memory
 bound (see resources on last slide)
Explore the output
 using WebGrind
Lots of MDB2 at
the top of the list
Static Candidate
   (no code)
Push Work to Client



Push all this work to the client
$('dd.note').each(function(i){
     $(this).html($(this).text().replace(/(eb)/ig,
        '<span style=quot;color:red;font-weight:800;quot;>$1</span>')
     );
});
Make Adjustments
•   Switch to PDO
    •   typically lean towards php built-ins that abstract a
        great deal of functionality (rather than libs built in
        php).

•   Use static (.htm) pages if we don’t need DB
    •   output buffer caching another alternative

•   Use js to ‘markup’ content
    •   fastest way a web server can do work is not to
        do it

        changes took about 40 min of work
Re-profile
$ http_load -parallel 5 -seconds 10 urls_better.txt
5008 fetches, 5 max parallel, 3.40076e+07 bytes, in 10.0003 seconds
6790.65 mean bytes/connection
500.785 fetches/sec, 3.40066e+06 bytes/sec
msecs/connect: 0.401153 mean, 9.334 max, 0.055 min
msecs/first-response: 8.39298 mean, 259.332 max, 0.141 min
HTTP response codes:
  code 200 -- 5008

Improvement
fetches/sec: ~250%
first-response: ~275%
Resources
Profiling articles form eZ Publish
  * http://ez.no/developer/articles/ez_publish_performance_optimization_part_1_of_3_introduction_and_benchmarking
  * http://ez.no/developer/articles/
ez_publish_performance_optimization_part_2_of_3_identifying_trouble_spots_by_debugging
  * http://ez.no/developer/articles/
ez_publish_performance_optimization_part_3_of_3_practical_cache_and_template_solutions

Profiling articles form IBM
  * http://www.ibm.com/developerworks/linux/library/l-tune-lamp-1/
  * http://www.ibm.com/developerworks/linux/library/l-tune-lamp-2.html
  * http://www.ibm.com/developerworks/library/l-tune-lamp-3.html

Excellent Open Source PHP IDE which utilizes Xdebug (step through, profile, code coverage)
 * http://www.netbeans.org/features/php/index.html

Profiling Presentation from core PHP folks
 * http://talks.php.net/index.php/Performance

Mais conteúdo relacionado

Mais procurados

Nahlédněte za oponu VersionPressu
Nahlédněte za oponu VersionPressuNahlédněte za oponu VersionPressu
Nahlédněte za oponu VersionPressuJan Voracek
 
Autotests introduction - Codeception + PHP Basics
Autotests introduction - Codeception + PHP BasicsAutotests introduction - Codeception + PHP Basics
Autotests introduction - Codeception + PHP BasicsArtur Babyuk
 
Martin Aspeli Extending And Customising Plone 3
Martin Aspeli   Extending And Customising Plone 3Martin Aspeli   Extending And Customising Plone 3
Martin Aspeli Extending And Customising Plone 3Vincenzo Barone
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flaskjuzten
 
Xdebug - Your first, last, and best option for troubleshooting PHP code
Xdebug - Your first, last, and best option for troubleshooting PHP codeXdebug - Your first, last, and best option for troubleshooting PHP code
Xdebug - Your first, last, and best option for troubleshooting PHP codeAdam Englander
 
WebPagetest Power Users - Velocity 2014
WebPagetest Power Users - Velocity 2014WebPagetest Power Users - Velocity 2014
WebPagetest Power Users - Velocity 2014Patrick Meenan
 
Developers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLIDevelopers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLIWP Engine
 
Simple webapps with nginx, uwsgi emperor and bottle
Simple webapps with nginx, uwsgi emperor and bottleSimple webapps with nginx, uwsgi emperor and bottle
Simple webapps with nginx, uwsgi emperor and bottleJordi Soucheiron
 
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)Ericom Software
 
WebPagetest - Good, Bad & Ugly
WebPagetest - Good, Bad & UglyWebPagetest - Good, Bad & Ugly
WebPagetest - Good, Bad & UglyAaron Peters
 
Odoo development workflow with pip and virtualenv
Odoo development workflow with pip and virtualenvOdoo development workflow with pip and virtualenv
Odoo development workflow with pip and virtualenvacsone
 
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...Vincenzo Barone
 
20151229 wnmp & phalcon micro app - part I
20151229 wnmp & phalcon micro app - part I20151229 wnmp & phalcon micro app - part I
20151229 wnmp & phalcon micro app - part ITaien Wang
 
SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)Robert Swisher
 
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018Thijs Feryn
 
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018Codemotion
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidenceJohn Congdon
 

Mais procurados (20)

Nahlédněte za oponu VersionPressu
Nahlédněte za oponu VersionPressuNahlédněte za oponu VersionPressu
Nahlédněte za oponu VersionPressu
 
X-Debug in Php Storm
X-Debug in Php StormX-Debug in Php Storm
X-Debug in Php Storm
 
Autotests introduction - Codeception + PHP Basics
Autotests introduction - Codeception + PHP BasicsAutotests introduction - Codeception + PHP Basics
Autotests introduction - Codeception + PHP Basics
 
Martin Aspeli Extending And Customising Plone 3
Martin Aspeli   Extending And Customising Plone 3Martin Aspeli   Extending And Customising Plone 3
Martin Aspeli Extending And Customising Plone 3
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
 
Xdebug - Your first, last, and best option for troubleshooting PHP code
Xdebug - Your first, last, and best option for troubleshooting PHP codeXdebug - Your first, last, and best option for troubleshooting PHP code
Xdebug - Your first, last, and best option for troubleshooting PHP code
 
WebPagetest Power Users - Velocity 2014
WebPagetest Power Users - Velocity 2014WebPagetest Power Users - Velocity 2014
WebPagetest Power Users - Velocity 2014
 
Developers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLIDevelopers, Be a Bada$$ with WP-CLI
Developers, Be a Bada$$ with WP-CLI
 
Simple webapps with nginx, uwsgi emperor and bottle
Simple webapps with nginx, uwsgi emperor and bottleSimple webapps with nginx, uwsgi emperor and bottle
Simple webapps with nginx, uwsgi emperor and bottle
 
AppengineJS
AppengineJSAppengineJS
AppengineJS
 
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
 
WebPagetest - Good, Bad & Ugly
WebPagetest - Good, Bad & UglyWebPagetest - Good, Bad & Ugly
WebPagetest - Good, Bad & Ugly
 
Odoo development workflow with pip and virtualenv
Odoo development workflow with pip and virtualenvOdoo development workflow with pip and virtualenv
Odoo development workflow with pip and virtualenv
 
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
 
20151229 wnmp & phalcon micro app - part I
20151229 wnmp & phalcon micro app - part I20151229 wnmp & phalcon micro app - part I
20151229 wnmp & phalcon micro app - part I
 
SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)
 
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Codemotion Rome 2018
 
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018
Leverage HTTP to deliver cacheable websites - Thijs Feryn - Codemotion Rome 2018
 
Zenoss: Buildout
Zenoss: BuildoutZenoss: Buildout
Zenoss: Buildout
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidence
 

Semelhante a Profiling PHP with Xdebug / Webgrind

Magento Performance Optimization 101
Magento Performance Optimization 101Magento Performance Optimization 101
Magento Performance Optimization 101Angus Li
 
ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4Jim Jagielski
 
High Performance Web Sites
High Performance Web SitesHigh Performance Web Sites
High Performance Web SitesRavi Raj
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroSteven Pignataro
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalabilityWim Godden
 
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupWeb Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupJonathan Klein
 
What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24Jim Jagielski
 
Introduction to Magento Optimization
Introduction to Magento OptimizationIntroduction to Magento Optimization
Introduction to Magento OptimizationFabio Daniele
 
Caching and tuning fun for high scalability @ FOSDEM 2012
Caching and tuning fun for high scalability @ FOSDEM 2012Caching and tuning fun for high scalability @ FOSDEM 2012
Caching and tuning fun for high scalability @ FOSDEM 2012Wim Godden
 
Heavy Web Optimization: Backend
Heavy Web Optimization: BackendHeavy Web Optimization: Backend
Heavy Web Optimization: BackendVõ Duy Tuấn
 
Lonestar php scalingmagento
Lonestar php scalingmagentoLonestar php scalingmagento
Lonestar php scalingmagentoMathew Beane
 
Why we choose Symfony2
Why we choose Symfony2Why we choose Symfony2
Why we choose Symfony2Merixstudio
 
SaltConf14 - Ben Cane - Using SaltStack in High Availability Environments
SaltConf14 - Ben Cane - Using SaltStack in High Availability EnvironmentsSaltConf14 - Ben Cane - Using SaltStack in High Availability Environments
SaltConf14 - Ben Cane - Using SaltStack in High Availability EnvironmentsSaltStack
 
Porting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability SystemsPorting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability SystemsMarcelo Pinheiro
 
Meetup Performance
Meetup PerformanceMeetup Performance
Meetup PerformanceGreg Whalin
 
Site Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariSite Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariJoseph Scott
 
Joomla! Performance on Steroids
Joomla! Performance on SteroidsJoomla! Performance on Steroids
Joomla! Performance on SteroidsSiteGround.com
 
Web Front End Performance
Web Front End PerformanceWeb Front End Performance
Web Front End PerformanceChris Love
 

Semelhante a Profiling PHP with Xdebug / Webgrind (20)

Magento Performance Optimization 101
Magento Performance Optimization 101Magento Performance Optimization 101
Magento Performance Optimization 101
 
ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4
 
High Performance Web Sites
High Performance Web SitesHigh Performance Web Sites
High Performance Web Sites
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupWeb Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
 
What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24
 
Introduction to Magento Optimization
Introduction to Magento OptimizationIntroduction to Magento Optimization
Introduction to Magento Optimization
 
Caching and tuning fun for high scalability @ FOSDEM 2012
Caching and tuning fun for high scalability @ FOSDEM 2012Caching and tuning fun for high scalability @ FOSDEM 2012
Caching and tuning fun for high scalability @ FOSDEM 2012
 
Heavy Web Optimization: Backend
Heavy Web Optimization: BackendHeavy Web Optimization: Backend
Heavy Web Optimization: Backend
 
Lonestar php scalingmagento
Lonestar php scalingmagentoLonestar php scalingmagento
Lonestar php scalingmagento
 
Why we choose Symfony2
Why we choose Symfony2Why we choose Symfony2
Why we choose Symfony2
 
SaltConf14 - Ben Cane - Using SaltStack in High Availability Environments
SaltConf14 - Ben Cane - Using SaltStack in High Availability EnvironmentsSaltConf14 - Ben Cane - Using SaltStack in High Availability Environments
SaltConf14 - Ben Cane - Using SaltStack in High Availability Environments
 
Porting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability SystemsPorting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability Systems
 
Meetup Performance
Meetup PerformanceMeetup Performance
Meetup Performance
 
Meetup Performance
Meetup PerformanceMeetup Performance
Meetup Performance
 
Scaling PHP apps
Scaling PHP appsScaling PHP apps
Scaling PHP apps
 
Site Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariSite Performance - From Pinto to Ferrari
Site Performance - From Pinto to Ferrari
 
Joomla! Performance on Steroids
Joomla! Performance on SteroidsJoomla! Performance on Steroids
Joomla! Performance on Steroids
 
Web Front End Performance
Web Front End PerformanceWeb Front End Performance
Web Front End Performance
 

Último

Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 

Último (20)

Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 

Profiling PHP with Xdebug / Webgrind

  • 1. Profiling PHP Applications Sam Keen @samkeen pdxphp.org: May 2009 Meeting
  • 2. Summary • Huge topic, so we will settle on one aspect of it • Concentrate on the Code aspect of profiling • We’ll concern ourselves more with ‘tools to get started’ rather than ‘Preferment code best practices’ (see last slide for that) • Will introduce a ‘secret ingredient’ that makes profiling super delicious!
  • 3. The Scenario You build a killer PHP site Works great out of the gate but then slowly degrades as more people use it until...
  • 4.
  • 5. How do we avoid this Or at least lesson the chance of it happening or at a minimum reduce the amount of “material” hitting the fan when it inevitably occurs
  • 6. Profiling - should be done during development - allows you to spot inefficiencies and bottlenecks in code rather than your clients Photo: http://www.flickr.com/photos/chermida/2913511936/
  • 7. Facilitating Profiling During Development • Make it as easy as possible to set up and use • This way it can become part of your daily (OK, maybe weekly) routine.
  • 8. Many Aspects of Profiling Code Db System Network CPU/RAM
  • 9. First steps for Db and System/Network Query logs: slow and index-less top, vmstat, dstat $ dstat @see http://dag.wieers.com/home-made/dstat
  • 10. Profiling Code -Baseline- Before you make changes, you need to get some sort of baseline of the performance of the application Otherwise, you cannot measure improvement So start with profiling the site as a “whole”
  • 11. Web Server Profiling Tools Apache Bench HTTP_load Siege Web Server
  • 12. HTTP_Load Install wget http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz tar -xzf http_load-12mar2006.tar.gz cd http_load-12mar2006/ make sudo make install @see eZ Publish article for coverage of the others: http://bit.ly/sKYha http://ez.no/developer/articles/ez_publish_performance_optimization_part_1_of_3_introduction_and_benchmarking
  • 13. HTTP_Load After creating for URL file (simple txt file with list o URLs (one per line) that will be randomly chosen from by http_load) The run something like: (runs for ten seconds, with five parallel requests) $ http_load -parallel 5 -seconds 10 urls.txt
  • 14. HTTP_Load Output $ http_load -parallel 5 -seconds 10 urls.txt 90 fetches, 5 max parallel, 805770 bytes, in 10 seconds 8953 mean bytes/connection 8.99999 fetches/sec, 80576.9 bytes/sec msecs/connect: 241.704 mean, 958.418 max, 73.01 min msecs/first-response: 252.075 mean, 1067.61 max, 83.833 min HTTP response codes: code 200 -- 90
  • 15. Xdebug Profiling Far more than just a profiler: * stack traces and function traces in error messages with: o full parameter display for user defined functions o function name, file name and line indications o support for member functions * memory allocation * protection for infinite recursions * profiling information for PHP scripts * code coverage analysis * debug your scripts interactively with a debug client @see xdebug.org
  • 16. Xdebug Install @see http://www.xdebug.org/docs/install Install with pecl sudo pecl install xdebug Add this line to your php.ini zend_extension=quot;/usr/local/php/modules/xdebug.soquot;
  • 17. Xdebug Configure ;##### START XDEBUG SECTION ######; zend_extension=/usr/lib/php/extensions/xdebug.so xdebug.remote_enable=on xdebug.remote_handle=dbgp xdebug.remote_host=localhost xdebug.remote_port=9000 xdebug.profiler_enable = 1 xdebug.profiler_output_name = cachegrind.out.%t-%s xdebug.profiler_output_dir=quot;/Users/sam/grind-outquot; ;##### END XDEBUG SECTION ######; http://www.xdebug.org/docs/all_settings#profiler_output_name
  • 18. Xdebug Local Setup php.ini@ -> /usr/local/php5/lib/php.ini.zenddebug php.ini.xdebug php.ini.xdebug.profile php.ini.zenddebug ~/bin (in my PATH) -rwxr-xr-x@ php-xdebug* -rwxr-xr-x@ php-xdebug-profile* -rwxr-xr-x@ php-zenddebug* Contents of php-xdebug-profile #!/bin/sh rm /usr/local/php5/lib/php.ini ln -s /usr/local/php5/lib/php.ini.xdebug.profile /usr/local/php5/lib/php.ini sudo apachectl restart $ php-xdebug-profile Now running php with Xdebug PROFILE: hurray for open source
  • 19. Profiling a specific page With Xdebug profiling enabled Simply request the web page in question using browser Look in your xdebug.profiler_output_dir for output cachegrind.out.1242152836-_Library_WebServer_Documents_persist_better_see_signups_php
  • 20. Examine the output • Traditionally: Kcachegrind • Install on Linux, or Windows: easy • Install on OSX: #&^!*&^!! • The Kcachegrind UI...
  • 21.
  • 22. And the Secret Ingredient
  • 23. Webgrind Webgrind is an Xdebug profiling web frontend in PHP5 @see http://code.google.com/p/webgrind/ Simple Installation on any platform that can run WebServer/PHP5 stack and the UI...
  • 24.
  • 25. Webgrind Install Install (Typical WebApp install: put the folder in your webroot and edit a config file) 1. Download to your web root * edit config.php * be sure $storageDir is writable by web server
  • 26. Extend UI UI is HTML and js (jquery) so trivial to make changes
  • 28. BaseLine $ http_load -parallel 5 -seconds 10 urls_could_improve.txt 1928 fetches, 5 max parallel, 1.92362e+07 bytes, in 10.0002 seconds 9977.27 mean bytes/connection 192.796 fetches/sec, 1.92358e+06 bytes/sec msecs/connect: 0.456549 mean, 9.326 max, 0.055 min msecs/first-response: 21.7894 mean, 599.711 max, 0.862 min HTTP response codes: code 200 -- 1928 *you would also be watching CPU and RAM with something like dstat during this test to determine if we are CPU and/or memory bound (see resources on last slide)
  • 29. Explore the output using WebGrind
  • 30. Lots of MDB2 at the top of the list
  • 31. Static Candidate (no code)
  • 32. Push Work to Client Push all this work to the client $('dd.note').each(function(i){ $(this).html($(this).text().replace(/(eb)/ig, '<span style=quot;color:red;font-weight:800;quot;>$1</span>') ); });
  • 33. Make Adjustments • Switch to PDO • typically lean towards php built-ins that abstract a great deal of functionality (rather than libs built in php). • Use static (.htm) pages if we don’t need DB • output buffer caching another alternative • Use js to ‘markup’ content • fastest way a web server can do work is not to do it changes took about 40 min of work
  • 34. Re-profile $ http_load -parallel 5 -seconds 10 urls_better.txt 5008 fetches, 5 max parallel, 3.40076e+07 bytes, in 10.0003 seconds 6790.65 mean bytes/connection 500.785 fetches/sec, 3.40066e+06 bytes/sec msecs/connect: 0.401153 mean, 9.334 max, 0.055 min msecs/first-response: 8.39298 mean, 259.332 max, 0.141 min HTTP response codes: code 200 -- 5008 Improvement fetches/sec: ~250% first-response: ~275%
  • 35. Resources Profiling articles form eZ Publish * http://ez.no/developer/articles/ez_publish_performance_optimization_part_1_of_3_introduction_and_benchmarking * http://ez.no/developer/articles/ ez_publish_performance_optimization_part_2_of_3_identifying_trouble_spots_by_debugging * http://ez.no/developer/articles/ ez_publish_performance_optimization_part_3_of_3_practical_cache_and_template_solutions Profiling articles form IBM * http://www.ibm.com/developerworks/linux/library/l-tune-lamp-1/ * http://www.ibm.com/developerworks/linux/library/l-tune-lamp-2.html * http://www.ibm.com/developerworks/library/l-tune-lamp-3.html Excellent Open Source PHP IDE which utilizes Xdebug (step through, profile, code coverage) * http://www.netbeans.org/features/php/index.html Profiling Presentation from core PHP folks * http://talks.php.net/index.php/Performance