Shoehorning Apache Onto Your Box System Sizing tips Sander Temme.

32
Shoehorning Apache Onto Your Box System Sizing tips Sander Temme <[email protected]>

Transcript of Shoehorning Apache Onto Your Box System Sizing tips Sander Temme.

Shoehorning Apache Onto Your Box

System Sizing tips

Sander Temme <[email protected]>

Agenda

The Problem

Monitoring Your Server

How Many Processes?

Selecting Your MPM

Spinning Locks

Tuning Tips

Further Reading

The Problem

Limited Resources

Work with what you have

How to get the most out of existing infrastructure

Monitoring Your Server

top

free

vmstat

Web server logs

SE Toolkit

mod_status

Generating Load

Top

free and vmstat

[sctemme@eartha sctemme]$ free total used free shared buffers cachedMem: 635080 601288 33792 0 110824 301084-/+ buffers/cache: 189380 445700Swap: 1315400 76 1315324

[sctemme@eartha sctemme]$ vmstat 3 5 procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 1 0 0 76 32704 110876 301092 0 0 14 17 117 254 4 3 9211 0 1 76 29672 110876 301092 0 0 0 32 118 1717 52 48 016 0 1 76 24564 110876 301092 0 0 0 0 119 2529 51 49 028 0 0 76 19740 110876 301092 0 0 0 8 119 4194 58 42 0 0 0 0 76 25188 110880 301092 0 0 0 8 182 5707 56 39 5

Web Server Logs

ErrorLog– LogLevel: debug, info, notice, warn,

error, crit

Access Log: TransferLog or CustomLog– Common Log Format

Common Log Format

172.16.2.91 - - [16/Nov/2003:15:23:27 -0800] "GET /~sctemme/ HTTP/1.1" 200 1446172.16.2.91 - - [16/Nov/2003:15:23:28 -0800] "GET /~sctemme/css/doc.css HTTP/1.1" 200 167172.16.2.91 - - [16/Nov/2003:15:23:28 -0800] "GET /~sctemme/css/menu.css HTTP/1.1" 200 623172.16.2.91 - - [16/Nov/2003:15:23:29 -0800] "GET /favicon.ico HTTP/1.1" 404 283172.16.2.91 - - [16/Nov/2003:15:23:34 -0800] "GET /~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

SE Toolkit

Solaris-specific

Freely available monitoring toolkit

http://www.setoolkit.com/

Scriptable with own language

zoom.se

zoom.se: trouble

mod_status

Apache module

Outputs internal status of web server

Part of standard installation

Not turned on by default

Generating Load

For testing and sizing purposes Not necessarily realistic Several free programs available

– ab– http_load– Flood– JMeter– OpenSTA

Commercial offerings– Load Runner

How Many Processes?

MaxClients

Spinning Threads

Sizing MaxClients

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)

Sizing MaxClients

Take total RAM

Subtract OS allowance– look at free value without Apache

Subtract external program allowance– JVM, cgi programs, MySQL?

Divide by httpd process size– Read process size from top

Top

Selecting Your MPM

Apache 2.0 only!

Processes and Threads

Differences between platforms

Thread-safety issues

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

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 NPTL in 2.6– NTPL already in RH 9, RHAS 3

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– Use KSE threading in 5.x– Still not endorsed by ASF

Spinning Locks

Accept mutex locking

Why Apache locks

When it doesn’t

How to manipulate

Accept Mutex Locking

Lock mutex

Loop: polllisteners

Got conn?Accept

connection

Unlockmutex

Handleconnection

Multiple Listener Configuration (default)

Accept Mutex Locking

Lock mutex

Acceptconnection

Unlockmutex

Handleconnection

Single Listener Configuration

Accept Mutex Locking

Acceptconnection

Handleconnection

Single Listener Unserialized Accept (SLUA)

Tuning Tips

RAM and swap space

ulimit: files and processes

Turn off unused services and modules

Spread the load around

ulimit

Per-process resource limits

Built-in command of sh, bash

Important limits:– processes (-u)– open files (-n)

Set in invoking shell

Add to Apache startup script– ulimit -S -n `ulimit -H -n`

Linux: /etc/security/limits.conf

Spread the Load

Move to tiered model

Off-load services to other boxes– Images– SSL– Database– Application server

Development/Deployment schism

Tiered Model

Apache Tomcat DatabaseNet

Further Reading

Ryan B. Bloom, Apache Server 2.0: The Complete Reference, 2002 McGraw Hill Osborne; ISBN 0-07-222344-8

Patrick Killelea, Web Performance Tuning, 2nd Edition, 2002 O’Reilly & Associates; ISBN 0-596-00172-X

http://httpd.apache.org/docs-2.0/misc/perf-tuning.html

http://httpd.apache.org/docs/misc/perf-tuning.html

Adrian Cockcroft, Richard Pettit and Sun Microsystems Press, Sun Performance and Tuning: Java and the Internet (2nd Edition), 1998 Prentice Hall PTR; ISBN 0130952494

Session Roadmap

TU02 – Advanced Topics in Module Design: Threadsafety and Portability

TU05 – Apache Performance

TU18 – Scalable Apache for Beginners

WE04 – Parallel Development and Hosting using Apache, Tomcat and MySQL

Current Version

http://apache.org/~sctemme/Apcon2003/MO12/