14. A fast page load is 2 seconds
This means you have 400ms to get that
HTML off your server
Saturday, May 18, 13
15. But network time could be ~100ms
This means you have 400ms 300ms to
build the page
Saturday, May 18, 13
16. < 100ms feels instant
< 1 sec feels like flow
< 10 sec to keep user’s attention
http://www.nngroup.com/articles/response-times-3-important-limits/
Saturday, May 18, 13
17. < 100ms feels instant
< 1 sec feels like flow
< 10 sec to keep user’s attention
Full Page Load – 2 Seconds
http://www.nngroup.com/articles/response-times-3-important-limits/
Saturday, May 18, 13
18. < 100ms feels instant
< 1 sec feels like flow
< 10 sec to keep user’s attention
Full Page Load – 2 Seconds
Base HTML – 400ms
http://www.nngroup.com/articles/response-times-3-important-limits/
Saturday, May 18, 13
19. < 100ms feels instant
< 1 sec feels like flow
< 10 sec to keep user’s attention
Full Page Load – 2 Seconds
Base HTML – 400ms
Server Generation Time – 300ms
http://www.nngroup.com/articles/response-times-3-important-limits/
Saturday, May 18, 13
24. Graphite
• Written by Orbitz
• Real-time graphing engine for StatsD data
(among other things)
• http://graphite.wikidot.com/
• Architecture: http://www.aosabook.org/en/
graphite.html
Saturday, May 18, 13
29. xhprof
• PHP Extension (need to install)
• http://pecl.php.net/package/xhprof
• Code level tracing
• Significant overhead, use in DEV only!
• Add ?xhprof=1 to URL
• Results in browser
Saturday, May 18, 13
37. Writing Efficient PHP
Set max value before loop:
$max = count($rows);
for ($i = 0; $i < $max; $i++) {
echo $i;
}
require_once() is slow
Minimize use of define()
Yes, single quotes are slightly faster than double quotes, but...
Saturday, May 18, 13
42. Writing Efficient PHP
Set max value before loop:
$max = count($rows);
for ($i = 0; $i < $max; $i++) {
echo $i;
}
Okay, this one is pretty good
Saturday, May 18, 13
53. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
Saturday, May 18, 13
54. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
Saturday, May 18, 13
55. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
5.4 is ~20-40% faster than 5.3
Saturday, May 18, 13
56. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
5.4 is ~20-40% faster than 5.3
http://news.php.net/php.internals/57760
Saturday, May 18, 13
57. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
5.4 is ~20-40% faster than 5.3
http://news.php.net/php.internals/57760
Saturday, May 18, 13
58. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
5.4 is ~20-40% faster than 5.3
http://news.php.net/php.internals/57760
Upgrading 5.2 --> 5.4 gives a 45-70% improvement!
Saturday, May 18, 13
59. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
5.4 is ~20-40% faster than 5.3
http://news.php.net/php.internals/57760
Upgrading 5.2 --> 5.4 gives a 45-70% improvement!
http://php.net/migration53
Saturday, May 18, 13
60. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
5.4 is ~20-40% faster than 5.3
http://news.php.net/php.internals/57760
Upgrading 5.2 --> 5.4 gives a 45-70% improvement!
http://php.net/migration53
http://php.net/migration54
Saturday, May 18, 13
61. Upgrade PHP
5.3 is ~20% faster than 5.2
http://news.php.net/php.internals/36484
5.4 is ~20-40% faster than 5.3
http://news.php.net/php.internals/57760
Upgrading 5.2 --> 5.4 gives a 45-70% improvement!
http://php.net/migration53
http://php.net/migration54
Saturday, May 18, 13
62. PHP 5.4 is 5 Times Faster than PHP 4
http://static.zend.com/topics/White-paper-PHP4-PHP5.pdf
Saturday, May 18, 13
67. Opcode Cache
Vanilla settings: 30-40% improvement
Turn off APC Stat: additional ~2x
improvement
-- Understand what is happening here
http://www.slideshare.net/vortexau/improving-php-application-performance-with-apc-presentation
Saturday, May 18, 13
68. Cache Data in a
Key-Value Store
Saturday, May 18, 13
71. APC User Cache
• Avoid fragmentation - keep utilization under 10%
Saturday, May 18, 13
72. APC User Cache
• Avoid fragmentation - keep utilization under 10%
• Assign 1GB, only fill 100MB
Saturday, May 18, 13
73. APC User Cache
• Avoid fragmentation - keep utilization under 10%
• Assign 1GB, only fill 100MB
• Compress objects that are > 10KB before storing
Saturday, May 18, 13
74. APC User Cache
• Avoid fragmentation - keep utilization under 10%
• Assign 1GB, only fill 100MB
• Compress objects that are > 10KB before storing
• Reduce garbage collection in the source of
apc_store()
Saturday, May 18, 13
75. APC User Cache
• Avoid fragmentation - keep utilization under 10%
• Assign 1GB, only fill 100MB
• Compress objects that are > 10KB before storing
• Reduce garbage collection in the source of
apc_store()
• Consider CDB
Saturday, May 18, 13
76. APC User Cache
• Avoid fragmentation - keep utilization under 10%
• Assign 1GB, only fill 100MB
• Compress objects that are > 10KB before storing
• Reduce garbage collection in the source of
apc_store()
• Consider CDB
• http://engineering.wayfair.com/moving-constants-out-of-apc-
and-into-cdb/
Saturday, May 18, 13
77. Memcached
• Usually a separate server
• In-memory key-value store
• Extremely simple and fast
• http://memcached.org/
Saturday, May 18, 13
78. APC vs. Memcached
APC User Cache Memcached
Local to the Server Shared Network Resource
Good for small objects Large or small objects
Good for mostly read
workloads
Can read and write quickly
Only one instance Can be clustered
Saturday, May 18, 13
79. Fix All Errors
• PHP 5.3: E_ALL | E_STRICT
• PHP 5.4: E_ALL
• Can also do error_reporting(-1);
Saturday, May 18, 13
81. HipHop for PHP
• Developed/Open Sourced by Facebook
• Now a VM + JIT compilation
• 5x improvement in throughput over PHP 5.2
• http://developers.facebook.com/blog/post/2010/02/02/
hiphop-for-php--move-fast/
• https://www.facebook.com/notes/facebook-engineering/
speeding-up-php-based-development-with-hiphop-vm/
10151170460698920
• https://github.com/facebook/hiphop-php
Saturday, May 18, 13
97. Be Careful
• JMeter looks a lot like a DOS attack
• Make sure you know what is failing
Saturday, May 18, 13
98. Be Careful
• JMeter looks a lot like a DOS attack
• Make sure you know what is failing
• Look at monitoring while test is running
Saturday, May 18, 13
99. Be Careful
• JMeter looks a lot like a DOS attack
• Make sure you know what is failing
• Look at monitoring while test is running
• Run in Production
Saturday, May 18, 13
100. Be Careful
• JMeter looks a lot like a DOS attack
• Make sure you know what is failing
• Look at monitoring while test is running
• Run in Production
• Run a test, make a change, run it again
Saturday, May 18, 13
105. Why is it terrible?
• Lack of context
Saturday, May 18, 13
106. Why is it terrible?
• Lack of context
• Are we talking about average or a percentile?
Saturday, May 18, 13
107. Why is it terrible?
• Lack of context
• Are we talking about average or a percentile?
• Server side time or client?
Saturday, May 18, 13
108. Why is it terrible?
• Lack of context
• Are we talking about average or a percentile?
• Server side time or client?
• Who is measuring it?
Saturday, May 18, 13
109. Why is it terrible?
• Lack of context
• Are we talking about average or a percentile?
• Server side time or client?
• Who is measuring it?
• When is it being measured?
Saturday, May 18, 13
110. Why is it terrible?
• Lack of context
• Are we talking about average or a percentile?
• Server side time or client?
• Who is measuring it?
• When is it being measured?
• Real users or synthetic?
Saturday, May 18, 13
112. Pick Tight SLAs
“The homepage of our site will load in
<300ms at the 80th percentile, measured
by sampling 10% of our real users over a
24 hour period every day at 8AM.”
Saturday, May 18, 13
113. Pick Tight SLAs
“The homepage of our site will load in
<300ms at the 80th percentile, measured
by sampling 10% of our real users over a
24 hour period every day at 8AM.”
Saturday, May 18, 13
116. Things to Remember
• Measure and monitor your application
• Focus on big wins
Saturday, May 18, 13
117. Things to Remember
• Measure and monitor your application
• Focus on big wins
• Run the latest (stable) version of PHP
Saturday, May 18, 13
118. Things to Remember
• Measure and monitor your application
• Focus on big wins
• Run the latest (stable) version of PHP
• Make sure you are using APC correctly
Saturday, May 18, 13
119. Things to Remember
• Measure and monitor your application
• Focus on big wins
• Run the latest (stable) version of PHP
• Make sure you are using APC correctly
• It’s always the database (stay in this room)
Saturday, May 18, 13
120. Things to Remember
• Measure and monitor your application
• Focus on big wins
• Run the latest (stable) version of PHP
• Make sure you are using APC correctly
• It’s always the database (stay in this room)
• Caching is your friend
Saturday, May 18, 13
121. Things to Remember
• Measure and monitor your application
• Focus on big wins
• Run the latest (stable) version of PHP
• Make sure you are using APC correctly
• It’s always the database (stay in this room)
• Caching is your friend
• Know what system resources you depend on
Saturday, May 18, 13
122. There is a lot more to talk about
Saturday, May 18, 13