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
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
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.
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?
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
0 comments
Post a comment