Caching for Cash: Benchmarking and Profiling
Upcoming SlideShare
Loading in...5
×
 

Caching for Cash: Benchmarking and Profiling

on

  • 3,885 views

 

Statistics

Views

Total Views
3,885
Views on SlideShare
3,879
Embed Views
6

Actions

Likes
0
Downloads
43
Comments
0

1 Embed 6

http://www.slideshare.net 6

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Caching for Cash: Benchmarking and Profiling Caching for Cash: Benchmarking and Profiling Presentation Transcript

    • CACHING FOR CASH - BENCHMARKING Scott MacVicar + Helgi Þormar Þorbjörnsson php|works 2008
    • GOALS Learn how to find slow pages Locate slow blocks of code Apply minor optimisations
    • THOUGHT STEPS Things seem a bit slow Take a guess whats slow Browse lots of code
    • SYSTEM COMPONENTS Appliation Server Database Server Application Database Network
    • PAGE BENCHMARKING Single Request doesn’t matter Average time for maximum amount of users Hopefully at worst it scales linearly
    • REQUIREMENTS Same hardware configuration Same server configuration Same network interface speed (100mbps) Basically your “staging server”
    • STEPS TO BENCHMARK Record server load Run our tests at least 3 times Take average of tests
    • BENCHMARKING TOOLS Apache Bench Apache Flood Siege
    • APACHE BENCH Shows requests per second Bundled with Apache Gives relative idea of load
    • APACHE BENCH - DEMO 1000 Requests with 5 at a time ab -n 1000 -c 5 http://localhost/phpBB3/index.php 1000 requests with 5 at a time using keep alive ab -n 1000 -c 5 -k http://localhost/phpBB3/index.php Output results to Excel / GNUPlot ab -n 1000 -c 5 -g http://localhost/phpBB3/index.php
    • ISSUES WITH APACHE BENCH Synthetic Benchmark No way to emulate users
    • APACHE FLOOD Profile driven benchmarking XML Based config Use variables on pages
    • XML FORMAT URLLIST FARM FARMER PROFILE
    • URLIST Simple group of URLs Supports postdelay and predelay
    • FARMER Single User Can use URLLIST in various ways Random Order Round Robin Keep-Alive
    • FARM It’s where the farmers work Controls the way the farmers work Creates farmers too
    • PROFILE Runtime configuration Can change various settings socket report
    • USE CASES User visits main page User visits main page then download page User visits main page then download and downloads a file
    • SINGLE PAGE Keep Alive Page Image Image
    • SINGLE PAGE XML
    • TWO PAGE VISITS Keep Alive Page Image Image 30 secs later Keep Alive Page Image Image
    • TWO PAGE VISITS XML
    • TWO PAGE VISITS AND DOWNOAD Keep Alive Page Image Image 30 secs later Keep Alive Page Image Image 15 secs later ISO
    • TWO PAGE VISIT AND DOWNOAD XML
    • SETUP A PROFILE enable keepalive use the relative times output format check for 200 OK
    • PROFILE XML
    • JOE THE FARMER
    • FARM FOR JOE TO WORK ON
    • RUNNING FLOOD flood <configuration.xml> > output.file anaylze-relative output.file
    • VMWARE INSTALL Run Run VMware- VMware- Run VMWare-fusion.dmg player-2.5.0-118166.exe Player-2.5.0-118166.i386 .bundle Reboot Copy Fedora 10 Folder to Disk Load via VMWare php / password
    • TASK • Visit http://localhost/phpBB3/ • View a forum after 20 seconds • View a thread after 5 seconds • Click reply after 60 seconds • Sample file in flood-examples folder
    • SIEGE Provides functionality of Apache Bench and Flood Supports GET and POST with a simple syntax Benchmark and Internet mode
    • SIEGE COMMANDS 1000 Requests with 5 at a time siege -b -r 1000 -c 5 http://localhost/phpBB3/index.php 10 seconds with concurrency of 5 siege -b -c 5 -t 10 http://localhost/phpBB3/index.php Read urls.txt for a list of URLs siege -b -n 1000 -c 5
    • SPROXY Creates local socks proxy on your machine Set your browser to use the local proxy, port 9001 Browse your site with the actions you wish urls.txt is written with the POST and GET data
    • OTHER BENCHMARKING TOOLS JMeter httperf Web Application Stress Tool OpenWebLoad
    • PROFILING
    • WHAT IS PROFILING Examines the performance characteristics Records every function call Tracks execution time Tracks memory usage
    • PROFILING TOOLS XDebug apd
    • XDEBUG Debugger Code Coverage Memory and Executon time
    • XDEBUG PROTECTIONS Stack overflow in PHP Infinite Recursion
    • ERROR MESSAGE HELPING
    • XDEBUG HELPFUL ERROR MESSAGES
    • MORE ERROR MESSAGE HELPING
    • EXECUTION TIME
    • MEMORY USAGE
    • EXECUTION TRACE xdebug.auto_trace=1 xdebug.trace_output_dir=/tmp xdebug.collect_params=1 xdebug.collect_return=1 xdebug.trace_output_name=trace.%c
    • EXECUTION TRACE
    • PARTIAL EXECUTION TRACE Tracing only parts of an application with xdebug_start_trace() and xdebug_stop_trace(). Fetching the trace file name that is being used with xdebug_get_tracefile_name(). Changing how much data is shown with xdebug.var_display_max_children, xdebug.var_display_max_data and xdebug.var_display_max_depth.
    • CODE COVERAGE Finds unexecuted code xdebug_start_code_coverage() xdebug_get_code_coverage() xdebug_stop_code_coverage()
    • CODE COVERAGE SAMPLE
    • CODE COVERAGE OUTPUT
    • PROFILING Execute action as normal in browser Outputs cachegrind file INI settings: xdebug.profiler_enable=1 ; enable profiler xdebug.profile_output_dir=/tmp ; output directory xdebug.profile_output_name=cachegrind.out.%p
    • PROFILING CONTINUED Locate parts of the code that is slow Work down tree to find the slow sections Can it be cached? Can it be optimized? Occasionally built?
    • VIEWING PROFILE KCacheGrind MacCallGrind WinCacheGrind Carica CacheGrind
    • PROFILING DEMO
    • TASK sudo nano -w /etc/php.d/xdebug.ini remove ; from xdebug.profiler_enabled=1 Profile a page on Wordpress Profile a page on phpBB Try to find something slow you think could be improved 20 minutes
    • APD Lives in PECL Similar to XDebug Doesn’t require KCachegrind Still only PHP 4
    • APD apd_set_pprof_trace() to enable profiler pprof is a script to interpret the trace Outputs to apd.dumpdir
    • BRINGING IT TOGETHER Use profiler with benchmarks Profiling can be run on production sites Optimise slow code
    • RESOURCES Lunch - back at 1pm for Caching http://talks.macvicar.net/ http://httpd.apache.org/test/flood/ http://xdebug.org/docs/ http://www.joedog.org