This document discusses optimizing a WordPress installation for performance. It recommends using Nginx as a reverse proxy cache in front of Apache and PHP to cache both logged-in and logged-out content. It achieved near elimination of problems, doubled network throughput, halved memory usage, and allowed disabling of plugins by caching everything. Results included atom feeds increasing in speed from 6 requests/second to over 7000 requests/second.
Convert to study guideBETA
Transform any presentation into a summarized study guide, highlighting the most important points and key insights.
1 of 16
Downloaded 32 times
More Related Content
Screaming Fast Wpmu
1. Screaming Fast Wordpress
Dan Collis-Puro
Berkman Center for Internet & Society
http://blogs.law.harvard.edu/djcp
djcp@cyber.law.harvard.edu
2. Me
Dev/sysadmin for 12 years
Pro linux admin 9 years
Perl / mod_perl / postgres / mysql / ruby / rails /
php
Mostly scrappy non-profits
Geek-of-all-trades at Berkman (
http://cyber.law.harvard.edu)
http://blogs.law.harvard.edu/
Help manage many servers and
apps
3. Goals
Use minimum resources to fulfill requests
Survive the slashdot/digg effect
Unobtrusive
Easy to tune
Optimize for different platforms / audiences
If you hit the app server, you've failed
If you MUST hit the app server, do
what's reasonable to minimize
resources
5. MySQL
Optimize tables (with mysqlcheck and a cron job)
Bump up query cache
Tune key buffers
mysqltuner.pl / tuning-primer.sh
Might want more indexes, depending
mytop
Slow query log
(meh) Clean out options table
(meh) Clean out revisions / old spam
(plugin) debug-queries
6. Linux
RAM
Never use swap
Fast disk, database on its own spindles
Fast network
stat() kills you on network filesystems
7. Apache
Use a reverse proxy
Keepalive on frontend, no keepalive on backend
Enable mod_deflate
Set a sane MaxClients setting
Use a lighter-weight frontend server nginx!
Use frontend proxy caching
apachetop
10. Wordpress
Two major audiences: logged in and not.
WP-SuperCache, W3 Total Cache
Memcached is not a panacea.
Nor is the WP object cache.
Disable unused plugins
CDN for media delivery
11. Our Problem
750+ live blogs, some heavily trafficked and quite
large
Not too many simulateously auth'd users
MANY spiders. Freakin' spiders!
Mini-DDOSs each week
ENORMOUS corpus of URLs to cache
RSS feeds don't use feedburner
12. Our Solution
nginx as a caching front-end proxy
No plugins
4 lines of code to the wordpress core
Very flexible caching rules
Able to cache for both audiences (sorta)
Able to cache EVERYTHING. Period.
Handles gzipping and logging
Able to kill bad 'bots
13. Results
Almost NO problems since implementation
Atom feed from 6/sec to 2500/sec (network test)
Atom feed from 3.95/sec to ~7000/sec (local test)
(apache 3500 / sec)
DOUBLED network throughput (?)
Halved memory requirements
Able to rip out all wordpress-level
customizations and plugins.
Except one.
15. Random Tools
ab + bash
firebug
yslow
Siege
htop
apachetop
mysqltop
EXPLAIN select