diff options
Diffstat (limited to 'docs/manual/misc/descriptors.html')
-rw-r--r-- | docs/manual/misc/descriptors.html | 155 |
1 files changed, 0 insertions, 155 deletions
diff --git a/docs/manual/misc/descriptors.html b/docs/manual/misc/descriptors.html deleted file mode 100644 index dadb7cc78d..0000000000 --- a/docs/manual/misc/descriptors.html +++ /dev/null @@ -1,155 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<HTML> -<HEAD> -<TITLE>Descriptors and Apache</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">Descriptors and Apache</H1> - -<P>A <EM>descriptor</EM>, also commonly called a <EM>file handle</EM> is -an object that a program uses to read or write an open file, or open -network socket, or a variety of other devices. It is represented -by an integer, and you may be familiar with <CODE>stdin</CODE>, -<CODE>stdout</CODE>, and <CODE>stderr</CODE> which are descriptors 0, -1, and 2 respectively. -Apache needs a descriptor for each log file, plus one for each -network socket that it listens on, plus a handful of others. Libraries -that Apache uses may also require descriptors. Normal programs don't -open up many descriptors at all, and so there are some latent problems -that you may experience should you start running Apache with many -descriptors (<EM>i.e.</EM>, with many virtual hosts). - -<P>The operating system enforces a limit on the number of descriptors -that a program can have open at a time. There are typically three limits -involved here. One is a kernel limitation, depending on your operating -system you will either be able to tune the number of descriptors available -to higher numbers (this is frequently called <EM>FD_SETSIZE</EM>). Or you -may be stuck with a (relatively) low amount. The second limit is called -the <EM>hard resource</EM> limit, and it is sometimes set by root in an -obscure operating system file, but frequently is the same as the kernel -limit. The third limit is called the <EM>soft -resource</EM> limit. The soft limit is always less than or equal to -the hard limit. For example, the hard limit may be 1024, but the soft -limit only 64. Any user can raise their soft limit up to the hard limit. -Root can raise the hard limit up to the system maximum limit. The soft -limit is the actual limit that is used when enforcing the maximum number -of files a process can have open. - -<P>To summarize: - -<CENTER><PRE> - #open files <= soft limit <= hard limit <= kernel limit -</PRE></CENTER> - -<P>You control the hard and soft limits using the <CODE>limit</CODE> (csh) -or <CODE>ulimit</CODE> (sh) directives. See the respective man pages -for more information. For example you can probably use -<CODE>ulimit -n unlimited</CODE> to raise your soft limit up to the -hard limit. You should include this command in a shell script which -starts your webserver. - -<P>Unfortunately, it's not always this simple. As mentioned above, -you will probably run into some system limitations that will need to be -worked around somehow. Work was done in version 1.2.1 to improve the -situation somewhat. Here is a partial list of systems and workarounds -(assuming you are using 1.2.1 or later): - -<DL> - - <DT><STRONG>BSDI 2.0</STRONG> - <DD>Under BSDI 2.0 you can build Apache to support more descriptors - by adding <CODE>-DFD_SETSIZE=nnn</CODE> to - <CODE>EXTRA_CFLAGS</CODE> (where nnn is the number of descriptors - you wish to support, keep it less than the hard limit). But it - will run into trouble if more than approximately 240 Listen - directives are used. This may be cured by rebuilding your kernel - with a higher FD_SETSIZE. - <P> - - <DT><STRONG>FreeBSD 2.2, BSDI 2.1+</STRONG> - <DD>Similar to the BSDI 2.0 case, you should define - <CODE>FD_SETSIZE</CODE> and rebuild. But the extra - Listen limitation doesn't exist. - <P> - - <DT><STRONG>Linux</STRONG> - <DD>By default Linux has a kernel maximum of 256 open descriptors - per process. There are several patches available for the - 2.0.x series which raise this to 1024 and beyond, and you - can find them in the "unofficial patches" section of <A - HREF="http://www.linuxhq.com/">the Linux Information HQ</A>. - None of these patches are perfect, and an entirely different - approach is likely to be taken during the 2.1.x development. - Applying these patches will raise the FD_SETSIZE used to compile - all programs, and unless you rebuild all your libraries you should - avoid running any other program with a soft descriptor limit above - 256. As of this writing the patches available for increasing - the number of descriptors do not take this into account. On a - dedicated webserver you probably won't run into trouble. - <P> - - <DT><STRONG>Solaris through 2.5.1</STRONG> - <DD>Solaris has a kernel hard limit of 1024 (may be lower in earlier - versions). But it has a limitation that files using - the stdio library cannot have a descriptor above 255. - Apache uses the stdio library for the ErrorLog directive. - When you have more than approximately 110 virtual hosts - (with an error log and an access log each) you will need to - build Apache with <CODE>-DHIGH_SLACK_LINE=256</CODE> added to - <CODE>EXTRA_CFLAGS</CODE>. You will be limited to approximately - 240 error logs if you do this. - <P> - - <DT><STRONG>AIX</STRONG> - <DD>AIX version 3.2?? appears to have a hard limit of 128 descriptors. - End of story. Version 4.1.5 has a hard limit of 2000. - <P> - - <DT><STRONG>Others</STRONG> - <DD>If you have details on another operating system, please submit - it through our <A HREF="http://www.apache.org/bug_report.html">Bug - Report Page</A>. - <P> - -</DL> - -<P>In addition to the problems described above there are problems with -many libraries that Apache uses. The most common example is the bind -DNS resolver library that is used by pretty much every unix, which -fails if it ends up with a descriptor above 256. We suspect there -are other libraries that similar limitations. So the code as of 1.2.1 -takes a defensive stance and tries to save descriptors less than 16 -for use while processing each request. This is called the <EM>low -slack line</EM>. - -<P>Note that this shouldn't waste descriptors. If you really are pushing -the limits and Apache can't get a descriptor above 16 when it wants -it, it will settle for one below 16. - -<P>In extreme situations you may want to lower the low slack line, -but you shouldn't ever need to. For example, lowering it can -increase the limits 240 described above under Solaris and BSDI 2.0. -But you'll play a delicate balancing game with the descriptors needed -to serve a request. Should you want to play this game, the compile -time parameter is <CODE>LOW_SLACK_LINE</CODE> and there's a tiny -bit of documentation in the header file <CODE>httpd.h</CODE>. - -<P>Finally, if you suspect that all this slack stuff is causing you -problems, you can disable it. Add <CODE>-DNO_SLACK</CODE> to -<CODE>EXTRA_CFLAGS</CODE> and rebuild. But please report it to -our <A HREF="http://www.apache.org/bug_report.html">Bug -Report Page</A> so that -we can investigate. - -<!--#include virtual="footer.html" --> -</BODY> -</HTML> |