Caching for Cash: Benchmarking and Profiling

61
CACHING FOR CASH - BENCHMARKING Scott MacVicar + Helgi Þormar Þorbjörnsson php|works 2008

description

 

Transcript of Caching for Cash: Benchmarking and Profiling

Page 1: Caching for Cash: Benchmarking and Profiling

CACHING FOR CASH - BENCHMARKING

Scott MacVicar + Helgi Þormar Þorbjörnssonphp|works 2008

Page 2: Caching for Cash: Benchmarking and Profiling

GOALS

Learn how to find slow pages

Locate slow blocks of code

Apply minor optimisations

Page 3: Caching for Cash: Benchmarking and Profiling

THOUGHT STEPS

Things seem a bit slow

Take a guess whats slow

Browse lots of code

Page 4: Caching for Cash: Benchmarking and Profiling

SYSTEM COMPONENTS

Appliation Server

Database Server

Application

Database

Network

Page 5: Caching for Cash: Benchmarking and Profiling

PAGE BENCHMARKING

Single Request doesn’t matter

Average time for maximum amount of users

Hopefully at worst it scales linearly

Page 6: Caching for Cash: Benchmarking and Profiling

REQUIREMENTS

Same hardware configuration

Same server configuration

Same network interface speed (100mbps)

Basically your “staging server”

Page 7: Caching for Cash: Benchmarking and Profiling

STEPS TO BENCHMARK

Record server load

Run our tests at least 3 times

Take average of tests

Page 8: Caching for Cash: Benchmarking and Profiling

BENCHMARKING TOOLS

Apache Bench

Apache Flood

Siege

Page 9: Caching for Cash: Benchmarking and Profiling

APACHE BENCH

Shows requests per second

Bundled with Apache

Gives relative idea of load

Page 10: Caching for Cash: Benchmarking and Profiling

APACHE BENCH - DEMO

1000 Requests with 5 at a timeab -n 1000 -c 5 http://localhost/phpBB3/index.php

1000 requests with 5 at a time using keep aliveab -n 1000 -c 5 -k http://localhost/phpBB3/index.php

Output results to Excel / GNUPlotab -n 1000 -c 5 -g http://localhost/phpBB3/index.php

Page 11: Caching for Cash: Benchmarking and Profiling

ISSUES WITH APACHE BENCH

Synthetic Benchmark

No way to emulate users

Page 12: Caching for Cash: Benchmarking and Profiling

APACHE FLOOD

Profile driven benchmarking

XML Based config

Use variables on pages

Page 13: Caching for Cash: Benchmarking and Profiling

XML FORMAT

URLLIST

FARM

FARMER

PROFILE

Page 14: Caching for Cash: Benchmarking and Profiling

URLIST

Simple group of URLs

Supports postdelay and predelay

Page 15: Caching for Cash: Benchmarking and Profiling

FARMER

Single User

Can use URLLIST in various ways

Random Order

Round Robin

Keep-Alive

Page 16: Caching for Cash: Benchmarking and Profiling

FARM

It’s where the farmers work

Controls the way the farmers work

Creates farmers too

Page 17: Caching for Cash: Benchmarking and Profiling

PROFILE

Runtime configuration

Can change various settings

socket

report

Page 18: Caching for Cash: Benchmarking and Profiling

USE CASES

User visits main page

User visits main page then download page

User visits main page then download and downloads a file

Page 19: Caching for Cash: Benchmarking and Profiling

SINGLE PAGE

Page Image ImageKeep Alive

Page 21: Caching for Cash: Benchmarking and Profiling

TWO PAGE VISITS

Page Image ImageKeep Alive

Page Image ImageKeep Alive

30 secslater

Page 23: Caching for Cash: Benchmarking and Profiling

TWO PAGE VISITS AND DOWNOAD

Page Image ImageKeep Alive

Page Image ImageKeep Alive

30 secslater

ISO

15 secslater

Page 25: Caching for Cash: Benchmarking and Profiling

SETUP A PROFILE

enable keepalive

use the relative times output format

check for 200 OK

Page 29: Caching for Cash: Benchmarking and Profiling

RUNNING FLOOD

flood <configuration.xml> > output.file

anaylze-relative output.file

Page 30: Caching for Cash: Benchmarking and Profiling

VMWARE INSTALL

Run VMware-player-2.5.0-118166.exe Run VMWare-fusion.dmg

Run VMware-

Player-2.5.0-118166.i386.bundle

Reboot

Copy Fedora 10 Folder to DiskLoad via VMWare php / password

Page 31: Caching for Cash: Benchmarking and Profiling

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

Page 32: Caching for Cash: Benchmarking and Profiling

SIEGE

Provides functionality of Apache Bench and Flood

Supports GET and POST with a simple syntax

Benchmark and Internet mode

Page 33: Caching for Cash: Benchmarking and Profiling

SIEGE COMMANDS

1000 Requests with 5 at a timesiege -b -r 1000 -c 5 http://localhost/phpBB3/index.php

10 seconds with concurrency of 5siege -b -c 5 -t 10 http://localhost/phpBB3/index.php

Read urls.txt for a list of URLssiege -b -n 1000 -c 5

Page 34: Caching for Cash: Benchmarking and Profiling

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

Page 35: Caching for Cash: Benchmarking and Profiling

OTHER BENCHMARKING TOOLS

JMeter

httperf

Web Application Stress Tool

OpenWebLoad

Page 36: Caching for Cash: Benchmarking and Profiling

PROFILING

Page 37: Caching for Cash: Benchmarking and Profiling

WHAT IS PROFILING

Examines the performance characteristics

Records every function call

Tracks execution time

Tracks memory usage

Page 38: Caching for Cash: Benchmarking and Profiling

PROFILING TOOLS

XDebug

apd

Page 39: Caching for Cash: Benchmarking and Profiling

XDEBUG

Debugger

Code Coverage

Memory and Executon time

Page 40: Caching for Cash: Benchmarking and Profiling

XDEBUG PROTECTIONS

Stack overflow in PHP

Infinite Recursion

Page 42: Caching for Cash: Benchmarking and Profiling

ERROR MESSAGE HELPING

Page 44: Caching for Cash: Benchmarking and Profiling

MORE ERROR MESSAGE HELPING

Page 47: Caching for Cash: Benchmarking and Profiling

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

Page 48: Caching for Cash: Benchmarking and Profiling

EXECUTION TRACE

Page 49: Caching for Cash: Benchmarking and Profiling

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.

Page 50: Caching for Cash: Benchmarking and Profiling

CODE COVERAGE

Finds unexecuted code

xdebug_start_code_coverage()

xdebug_get_code_coverage()

xdebug_stop_code_coverage()

Page 53: Caching for Cash: Benchmarking and Profiling

PROFILING

Execute action as normal in browser

Outputs cachegrind file

INI settings:xdebug.profiler_enable=1 ; enable profilerxdebug.profile_output_dir=/tmp ; output directoryxdebug.profile_output_name=cachegrind.out.%p

Page 54: Caching for Cash: Benchmarking and Profiling

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?

Page 55: Caching for Cash: Benchmarking and Profiling

VIEWING PROFILE

KCacheGrind

MacCallGrind

WinCacheGrind

Carica CacheGrind

Page 56: Caching for Cash: Benchmarking and Profiling

PROFILING DEMO

Page 57: Caching for Cash: Benchmarking and Profiling

TASK

sudo nano -w /etc/php.d/xdebug.iniremove ; 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

Page 58: Caching for Cash: Benchmarking and Profiling

APD

Lives in PECL

Similar to XDebug

Doesn’t require KCachegrind

Still only PHP 4

Page 59: Caching for Cash: Benchmarking and Profiling

APD

apd_set_pprof_trace() to enable profiler

pprof is a script to interpret the trace

Outputs to apd.dumpdir

Page 60: Caching for Cash: Benchmarking and Profiling

BRINGING IT TOGETHER

Use profiler with benchmarks

Profiling can be run on production sites

Optimise slow code

Page 61: Caching for Cash: Benchmarking and Profiling

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