Apache Performance Tuning
Download
Report
Transcript Apache Performance Tuning
Apache Performance
Tuning
Part 1: Scaling Up
Sander Temme <[email protected]>
1
Who am I?
Member, Apache Software Foundation
Infrastructure Team Member
Contractor
Lurker on dev@httpd
Walt Disney Imagineering
ADP
University of California
Currently unemployed…
2
http://httpd.apache.org/docs/1.3/misc/perf-tuning.html
says:
“Apache is a general webserver, which is designed to
be correct first, and fast second. Even so, its
performance is quite satisfactory. Most sites have less
than 10Mbits of outgoing bandwidth, which Apache can
fill using only a low end Pentium-based webserver.”
3
4
Goals of Performance Tuning
Serve as Many Requests as Possible
Graceful Degradation
(Don’t crash the box)
5
Assumptions
Limited Resources
Work With What You Have
You’re probably running Linux
No Compiling or Recompiling!
You can find httpd.conf
6
Monitoring Your Server
7
Purposes of Monitoring
Observation
Extrapolation
Signals/Alerts
Testing
8
Monitoring Apache
9
Monitoring Solaris: SE Toolkit
Lightweight
Programmable
Alive
http://www.sunfreeware.com/setoolkit.html
10
Other Monitoring Tools
vmstat
iostat
top
free
11
Web Server Logs
ErrorLog
LogLevel: debug, info, notice, warn, error, crit
Access Log: TransferLog or CustomLog
Common Log Format
12
Common Log Format
172.16.2.91
172.16.2.91
172.16.2.91
172.16.2.91
172.16.2.91
-
-
[16/Nov/2003:15:23:27
[16/Nov/2003:15:23:28
[16/Nov/2003:15:23:28
[16/Nov/2003:15:23:29
[16/Nov/2003:15:23:34
-0800]
-0800]
-0800]
-0800]
-0800]
"GET
"GET
"GET
"GET
"GET
/~sctemme/ HTTP/1.1" 200 1446
/~sctemme/css/doc.css HTTP/1.1" 200 167
/~sctemme/css/menu.css HTTP/1.1" 200 623
/favicon.ico HTTP/1.1" 404 283
/~sctemme/index.html HTTP/1.1" 200 1446
Client IP
172.16.2.91
RFC 1413 ident
-
username
-
timestamp
[16/Nov/2003:15:23:29 -0800]
Request
"GET /favicon.ico HTTP/1.1"
Status Code
404
Content Bytes
283
13
Log File Analysis
Analog
Fast
Cryptic output
Webalizer
Not as fast
Nicer output
Patched version available w/ GeoIP, DNS, 404
support (Google for it)
http://www.mrunix.net/webalizer/
http://www.analog.cx/
14
Webalizer Output
QuickTime™ and a
TIFF (LZW) decompressor
are needed to see this picture.
15
Webalizer Output Detail
QuickTime™ and a
TIFF (LZW) decompressor
are needed to see this picture.
16
Configuring for Performance
Configuring Apache
Tuning the Operating System
17
Apache Configuration
Process/Thread Management
DNS Lookups
Avoid .htaccess Files
Disable unused modules
Tune your App Tier
18
Selecting Your MPM
Apache 2.x only!
Processes and Threads
Differences between platforms
Thread-safety issues
19
Processes and Threads
Process:
Own copy of data structures
Shares: program code, shared memory
Context switches expensive
Thread:
Runs within process
Shares process environment
No context switch
20
Platforms and Threading
Context switches expensive on Solaris, AIX
Context switches cheaper on Linux
Solaris uses M:N threading
Linux uses 1 process per thread
LinuxThreads implementation is old
Replaced by Native Posix Thread Library (NPTL)
in 2.6
NTPL already in RH 9, RHAS 3
21
Thread-safety
Third-party modules and libraries
mod_perl: experimental threading in Perl 5.6;
more mature in Perl 5.8
PHP: uses many third-party libraries
FreeBSD: threading not reliable until 5.x
Apache 2.2 Worker MPM runs on FreeBSD
22
MaxClients
Configuration file directive
Maximum number of workers
Apache 1.3, 2.0 Prefork: processes
Apache 2.0 Worker: threads * processes
Limit according to resources (memory)
23
Sizing MaxClients
Take total RAM
Subtract OS allowance
Subtract external program allowance
look at free value without Apache, etc.
JVM, cgi programs, MySQL?
Divide by httpd process size
Read process size from top
24
Top
25
DNS Lookups
HostnameLookups
Access Control
Bad: Deny from example.com
Good: Deny from 172.160.234.5
26
.htaccess Files
Per-directory configuration files
Accessed for every request
Best performance: AllowOverride none
GET /dir1/dir2/restricted.html HTTP/1.0
27
Server-side Includes
We Love Them!
We Hate Them!
Easy to implement
Easy to manage
They break sendfile()
They break cacheability
Use XBitHack Directive
Only parse executable text/html type files
Special treatment of Last-modified date
28
SSI on www.apache.orgSSI Enabled
29
Tune your App Tier
Tomcat
Edit server.xml, tune minProcessors,
maxProcessors
Use APR -> Persistent connections
Tune JVM (Heap, Garbage Collection)
MySQL
Ships with various scenarios in support-files:
my-{small,medium,large,huge}.conf
PHP & prefork: every child makes a connection
Tune max_connections variable in my.cnf
30
System Tuning Tips
RAM and swap space
ulimit: files and processes
Turn off unused services and modules
31
RAM and Swap
Swap is disk-based Extension of RAM
Excessive swapping kills performance
Tune MaxClients
Never have more memory than swap
Upgrade RAM -> add more swap space
32
ulimit
Per-process resource limits
Built-in command of sh, bash
Important limits:
Set in invoking shell
Code in Apache 2 startup script
processes (-u)
open files (-n)
ulimit -S -n `ulimit -H -n`
Linux: /etc/security/limits.conf
33
Caching Content
Dynamic Content is Expensive
Static Content Relatively Cheap
Several Approaches:
Dynamic caching
Pre-rendering popular pages (index.rss…)
34
mod_cache Configuration
<IfModule mod_cache.c>
<IfModule mod_disk_cache.c>
CacheRoot /raid1/cacheroot
CacheEnable disk /
# A page modified 100 min. ago will expire in 10 min.
CacheLastModifiedFactor .1
# Always check again after 6 hours
CacheMaxExpire 21600
</IfModule>
</IfModule>
35
Make Popular Pages Static
RSS Feeds
Popular catalog queries
… (Check your access log)
36
Static Page Substitution
<Directory "/home/sctemme/inst/blog/httpd/htdocs">
Options +Indexes
Order allow,deny
Allow from all
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /cgi-bin/blosxom.cgi/$1 [L,QSA]
</Directory>
37
Tips
Observe Before You Act
Act on Monitoring Results
Don’t Overload Your System
38
Q&A
39
Conference Roadmap
TU1
WE3
30 Top PHP Scalability Mistakes
CNN.com Performance and Lessons
Learned
WE8 Hacking the Apache HTTP Server at
Yahoo!
WE24 Essentials on Performant JavaServer™
Faces Apps: Client Versus Server Side
TH1
Httpd Power Tools
TH4
mod_perl for Speed Freaks!
TH7
2.2 Rocks! Quit using 1.3 already!
TH9
mod_perl-2.0: Advanced Profiling &
Instrumenting Techniques
40
Current Version
http://people.apache.org/~sctemme/ApconUS2006/WE18/
41
Thank You
42