Your SlideShare is downloading. ×
  • Like
Caching for Cash: Benchmarking and Profiling
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Caching for Cash: Benchmarking and Profiling

  • 2,464 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,464
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
46
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. CACHING FOR CASH - BENCHMARKING Scott MacVicar + Helgi Þormar Þorbjörnsson php|works 2008
  • 2. GOALS Learn how to find slow pages Locate slow blocks of code Apply minor optimisations
  • 3. THOUGHT STEPS Things seem a bit slow Take a guess whats slow Browse lots of code
  • 4. SYSTEM COMPONENTS Appliation Server Database Server Application Database Network
  • 5. PAGE BENCHMARKING Single Request doesn’t matter Average time for maximum amount of users Hopefully at worst it scales linearly
  • 6. REQUIREMENTS Same hardware configuration Same server configuration Same network interface speed (100mbps) Basically your “staging server”
  • 7. STEPS TO BENCHMARK Record server load Run our tests at least 3 times Take average of tests
  • 8. BENCHMARKING TOOLS Apache Bench Apache Flood Siege
  • 9. APACHE BENCH Shows requests per second Bundled with Apache Gives relative idea of load
  • 10. 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
  • 11. ISSUES WITH APACHE BENCH Synthetic Benchmark No way to emulate users
  • 12. APACHE FLOOD Profile driven benchmarking XML Based config Use variables on pages
  • 13. XML FORMAT URLLIST FARM FARMER PROFILE
  • 14. URLIST Simple group of URLs Supports postdelay and predelay
  • 15. FARMER Single User Can use URLLIST in various ways Random Order Round Robin Keep-Alive
  • 16. FARM It’s where the farmers work Controls the way the farmers work Creates farmers too
  • 17. PROFILE Runtime configuration Can change various settings socket report
  • 18. USE CASES User visits main page User visits main page then download page User visits main page then download and downloads a file
  • 19. SINGLE PAGE Keep Alive Page Image Image
  • 20. SINGLE PAGE XML
  • 21. TWO PAGE VISITS Keep Alive Page Image Image 30 secs later Keep Alive Page Image Image
  • 22. TWO PAGE VISITS XML
  • 23. TWO PAGE VISITS AND DOWNOAD Keep Alive Page Image Image 30 secs later Keep Alive Page Image Image 15 secs later ISO
  • 24. TWO PAGE VISIT AND DOWNOAD XML
  • 25. SETUP A PROFILE enable keepalive use the relative times output format check for 200 OK
  • 26. PROFILE XML
  • 27. JOE THE FARMER
  • 28. FARM FOR JOE TO WORK ON
  • 29. RUNNING FLOOD flood <configuration.xml> > output.file anaylze-relative output.file
  • 30. 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
  • 31. 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
  • 32. SIEGE Provides functionality of Apache Bench and Flood Supports GET and POST with a simple syntax Benchmark and Internet mode
  • 33. 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
  • 34. 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
  • 35. OTHER BENCHMARKING TOOLS JMeter httperf Web Application Stress Tool OpenWebLoad
  • 36. PROFILING
  • 37. WHAT IS PROFILING Examines the performance characteristics Records every function call Tracks execution time Tracks memory usage
  • 38. PROFILING TOOLS XDebug apd
  • 39. XDEBUG Debugger Code Coverage Memory and Executon time
  • 40. XDEBUG PROTECTIONS Stack overflow in PHP Infinite Recursion
  • 41. ERROR MESSAGE HELPING
  • 42. XDEBUG HELPFUL ERROR MESSAGES
  • 43. MORE ERROR MESSAGE HELPING
  • 44. EXECUTION TIME
  • 45. MEMORY USAGE
  • 46. 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
  • 47. EXECUTION TRACE
  • 48. 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.
  • 49. CODE COVERAGE Finds unexecuted code xdebug_start_code_coverage() xdebug_get_code_coverage() xdebug_stop_code_coverage()
  • 50. CODE COVERAGE SAMPLE
  • 51. CODE COVERAGE OUTPUT
  • 52. 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
  • 53. 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?
  • 54. VIEWING PROFILE KCacheGrind MacCallGrind WinCacheGrind Carica CacheGrind
  • 55. PROFILING DEMO
  • 56. 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
  • 57. APD Lives in PECL Similar to XDebug Doesn’t require KCachegrind Still only PHP 4
  • 58. APD apd_set_pprof_trace() to enable profiler pprof is a script to interpret the trace Outputs to apd.dumpdir
  • 59. BRINGING IT TOGETHER Use profiler with benchmarks Profiling can be run on production sites Optimise slow code
  • 60. 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