| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <meta name="generator" content="HTML Tidy, see www.w3.org" /> |
| |
| <title>Hints on Running a High-Performance Web Server</title> |
| </head> |
| <!-- Background white, links blue (unvisited), navy (visited), red (active) --> |
| |
| <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" |
| vlink="#000080" alink="#FF0000"> |
| <!--#include virtual="header.html" --> |
| |
| <h1 align="CENTER">Hints on Running a High-Performance Web |
| Server</h1> |
| Running Apache on a heavily loaded web server, one often |
| encounters problems related to the machine and OS |
| configuration. "Heavy" is relative, of course - but if you are |
| seeing more than a couple hits per second on a sustained basis |
| you should consult the pointers on this page. In general the |
| suggestions involve how to tune your kernel for the heavier TCP |
| load, hardware/software conflicts that arise, <em>etc.</em> |
| |
| <ul> |
| <li><a href="#AUX">A/UX (Apple's UNIX)</a></li> |
| |
| <li><a href="#BSD">BSD-based (BSDI, FreeBSD, etc)</a></li> |
| |
| <li><a href="#DEC">Digital UNIX</a></li> |
| |
| <li><a href="perf-hp.html">HPUX</a></li> |
| |
| <li><a href="#irix">IRIX</a></li> |
| |
| <li><a href="#Linux">Linux</a></li> |
| |
| <li><a href="#Solaris">Solaris</a></li> |
| |
| <li><a href="#SunOS">SunOS 4.x</a></li> |
| |
| <li><a href="#SVR4">SVR4</a></li> |
| </ul> |
| <hr /> |
| |
| <h3><a id="AUX" name="AUX">A/UX (Apple's UNIX)</a></h3> |
| If you are running Apache on A/UX, a page that gives some |
| helpful performance hints (concerning the <em>listen()</em> |
| queue and using virtual hosts) <a |
| href="http://www.jaguNET.com/apache.html">can be found here</a> |
| |
| <hr /> |
| |
| <h3><a id="BSD" name="BSD">BSD-based (BSDI, FreeBSD, |
| etc)</a></h3> |
| <a href="perf-bsd44.html#initial">Quick</a> and <a |
| href="perf-bsd44.html#detail">detailed</a> performance tuning |
| hints for BSD-derived systems. <a |
| href="perf-bsd44.html#accf">Accept filtering</a> on FreeBSD. |
| <hr /> |
| |
| <h3><a id="DEC" name="DEC">Digital UNIX</a></h3> |
| |
| <ul> |
| <li><a |
| href="http://www.sean.de/Solaris/tune.html"> |
| Solaris 2.x - tuning your TCP/IP stack</a> contains some good |
| technical information about tuning various Solaris TCP/IP |
| parameters.</li> |
| </ul> |
| <hr /> |
| |
| <h3><a id="SunOS" name="SunOS">SunOS 4.x</a></h3> |
| More information on tuning SOMAXCONN on SunOS can be found at |
| <a |
| href="http://www.islandnet.com/~mark/somaxconn.html">http://www.islandnet.com/~mark/somaxconn.html</a>. |
| |
| <hr /> |
| |
| <h3><a id="SVR4" name="SVR4">SVR4</a></h3> |
| Some SVR4 versions waste three system calls on every |
| <samp>gettimeofday()</samp> call. Depending on the syntactic |
| form of the <samp>TZ</samp> environment variable, these systems |
| have several different algorithms to determine the local time |
| zone (presumably <em>compatible</em> with something). The |
| following example uses the central european time zone to |
| demonstrate this: |
| |
| <dl> |
| <dt><strong>TZ=:MET</strong></dt> |
| |
| <dd> |
| This form delegates the knowledge of the time zone |
| information to an external compiled zoneinfo file (à |
| la BSD).<br /> |
| <strong>Caveat:</strong> Each time the gettimeofday() |
| function is called, the external zone info is read in again |
| (at least on some SVR4 systems). That results in three |
| wasted system calls with every apache request served. |
| <pre> |
| open("/usr/lib/locale/TZ/MET", O_RDONLY) = 3 |
| read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 7944) = 778 |
| close(3) = 0 |
| </pre> |
| </dd> |
| |
| <dt> |
| <strong>TZ=MET-1MDT,M3.5.0/02:00:00,M10.5.0/03:00:00</strong></dt> |
| |
| <dd>This syntax form (à la SYSV) contains all the |
| knowledge about time zone beginning and ending times in its |
| external representation. It has to be parsed each time it is |
| evaluated, resulting in a slight computing overhead, but it |
| requires no system call. Though the table lookup à la |
| BSD is the more sophisticated technical solution, the bad |
| SVR4 implementation makes this the preferred syntax on |
| systems which otherwise access the external zone info file |
| repeatedly.</dd> |
| </dl> |
| You should use the <samp>truss</samp> utility on a |
| single-process apache server (started with the <samp>-X</samp> |
| debugging switch) to determine whether your system can profit |
| from the second form of the <samp>TZ</samp> environment |
| variable. If it does, you could integrate the setting of the |
| preferred <samp>TZ</samp> syntax into the httpd startup script, |
| which is usually simply a copy of (or symbolic link to) the |
| <samp>apachectl</samp> utility script, or into the system's |
| <samp>/etc/TIMEZONE</samp> script. |
| <hr /> |
| |
| <h3>More welcome!</h3> |
| If you have tips to contribute, please submit them to |
| the <a href="http://bugs.apache.org/">Apache Bug |
| Database</a>. |
| |
| <!--#include virtual="footer.html" --> |
| </body> |
| </html> |
| |