home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 November / CMCD1104.ISO / Software / Complet / Apache / apache_2.0.52-win32-x86-no_ssl.msi / Data.Cab / F277914_descriptors.xml < prev    next >
Extensible Markup Language  |  2004-04-17  |  10KB  |  226 lines

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
  3. <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
  4. <!-- $Revision: 1.1.2.6 $ -->
  5.  
  6. <!--
  7.  Copyright 2003-2004 The Apache Software Foundation
  8.  
  9.  Licensed under the Apache License, Version 2.0 (the "License");
  10.  you may not use this file except in compliance with the License.
  11.  You may obtain a copy of the License at
  12.  
  13.      http://www.apache.org/licenses/LICENSE-2.0
  14.  
  15.  Unless required by applicable law or agreed to in writing, software
  16.  distributed under the License is distributed on an "AS IS" BASIS,
  17.  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  18.  See the License for the specific language governing permissions and
  19.  limitations under the License.
  20. -->
  21.  
  22. <manualpage metafile="descriptors.xml.meta">
  23.   <parentdocument href="./">Miscellaneous Documentation</parentdocument>
  24.  
  25.   <title>Descriptors and Apache</title>
  26.  
  27.   <summary>
  28.  
  29.     <note type="warning"><title>Warning:</title>
  30.       <p>This document has not been fully updated
  31.       to take into account changes made in the 2.0 version of the
  32.       Apache HTTP Server. Some of the information may still be
  33.       relevant, but please use it with care.</p>
  34.     </note>
  35.  
  36.     <p>A <em>descriptor</em>, also commonly called a <em>file
  37.     handle</em> is an object that a program uses to read or write
  38.     an open file, or open network socket, or a variety of other
  39.     devices. It is represented by an integer, and you may be
  40.     familiar with <code>stdin</code>, <code>stdout</code>, and
  41.     <code>stderr</code> which are descriptors 0, 1, and 2
  42.     respectively. Apache needs a descriptor for each log file, plus
  43.     one for each network socket that it listens on, plus a handful
  44.     of others. Libraries that Apache uses may also require
  45.     descriptors. Normal programs don't open up many descriptors at
  46.     all, and so there are some latent problems that you may
  47.     experience should you start running Apache with many
  48.     descriptors (<em>i.e.</em>, with many virtual hosts).</p>
  49.  
  50.     <p>The operating system enforces a limit on the number of
  51.     descriptors that a program can have open at a time. There are
  52.     typically three limits involved here. One is a kernel
  53.     limitation, depending on your operating system you will either
  54.     be able to tune the number of descriptors available to higher
  55.     numbers (this is frequently called <em>FD_SETSIZE</em>). Or you
  56.     may be stuck with a (relatively) low amount. The second limit
  57.     is called the <em>hard resource</em> limit, and it is sometimes
  58.     set by root in an obscure operating system file, but frequently
  59.     is the same as the kernel limit. The third limit is called the
  60.     <em>soft resource</em> limit. The soft limit is always less
  61.     than or equal to the hard limit. For example, the hard limit
  62.     may be 1024, but the soft limit only 64. Any user can raise
  63.     their soft limit up to the hard limit. Root can raise the hard
  64.     limit up to the system maximum limit. The soft limit is the
  65.     actual limit that is used when enforcing the maximum number of
  66.     files a process can have open.</p>
  67.  
  68.     <p>To summarize:</p>
  69.  
  70. <example>
  71.   #open files  <=  soft limit  <=  hard limit  <=  kernel limit
  72. </example>
  73.  
  74.  
  75.     <p>You control the hard and soft limits using the
  76.     <code>limit</code> (csh) or <code>ulimit</code> (sh)
  77.     directives. See the respective man pages for more information.
  78.     For example you can probably use <code>ulimit -n
  79.     unlimited</code> to raise your soft limit up to the hard limit.
  80.     You should include this command in a shell script which starts
  81.     your webserver.</p>
  82.  
  83.     <p>Unfortunately, it's not always this simple. As mentioned
  84.     above, you will probably run into some system limitations that
  85.     will need to be worked around somehow. Work was done in version
  86.     1.2.1 to improve the situation somewhat. Here is a partial list
  87.     of systems and workarounds (assuming you are using 1.2.1 or
  88.     later).</p>
  89.  
  90.   </summary>
  91.  
  92.   <section id="bsdi"><title>BSDI 2.0</title>
  93.  
  94.    <p>Under BSDI 2.0 you can build Apache to support more
  95.    descriptors by adding <code>-DFD_SETSIZE=nnn</code> to
  96.    <code>EXTRA_CFLAGS</code> (where nnn is the number of
  97.    descriptors you wish to support, keep it less than the hard
  98.    limit). But it will run into trouble if more than
  99.    approximately 240 Listen directives are used. This may be
  100.    cured by rebuilding your kernel with a higher
  101.    FD_SETSIZE.</p>
  102.  
  103.   </section>
  104.  
  105.   <section id="freebsd"><title>FreeBSD 2.2, BSDI 2.1+</title>
  106.  
  107.    <p>Similar to the BSDI 2.0 case, you should define
  108.    <code>FD_SETSIZE</code> and rebuild. But the extra Listen
  109.    limitation doesn't exist.</p>
  110.  
  111.   </section>
  112.  
  113.   <section id="linux"><title>Linux</title>
  114.  
  115.    <p>By default Linux has a kernel maximum of 256 open
  116.    descriptors per process. There are several patches available
  117.    for the 2.0.x series which raise this to 1024 and beyond, and
  118.    you can find them in the "unofficial patches" section of <a
  119.    href="http://www.linuxhq.com/">the Linux Information HQ</a>.
  120.    None of these patches are perfect, and an entirely different
  121.    approach is likely to be taken during the 2.1.x development.
  122.    Applying these patches will raise the FD_SETSIZE used to
  123.    compile all programs, and unless you rebuild all your
  124.    libraries you should avoid running any other program with a
  125.    soft descriptor limit above 256. As of this writing the
  126.    patches available for increasing the number of descriptors do
  127.    not take this into account. On a dedicated webserver you
  128.    probably won't run into trouble.</p>
  129.  
  130.   </section>
  131.  
  132.   <section id="solaris"><title>Solaris through 2.5.1</title>
  133.  
  134.    <p>Solaris has a kernel hard limit of 1024 (may be lower in
  135.    earlier versions). But it has a limitation that files using
  136.    the stdio library cannot have a descriptor above 255. Apache
  137.    uses the stdio library for the ErrorLog directive. When you
  138.    have more than approximately 110 virtual hosts (with an error
  139.    log and an access log each) you will need to build Apache
  140.    with <code>-DHIGH_SLACK_LINE=256</code> added to
  141.    <code>EXTRA_CFLAGS</code>. You will be limited to
  142.    approximately 240 error logs if you do this.</p>
  143.  
  144.   </section>
  145.  
  146.   <section id="AIX"><title>AIX</title>
  147.  
  148.    <p>AIX version 3.2?? appears to have a hard limit of 128
  149.    descriptors. End of story. Version 4.1.5 has a hard limit of
  150.    2000.</p>
  151.  
  152.   </section>
  153.  
  154.   <section id="sco"><title>SCO OpenServer</title>
  155.  
  156.    <p>Edit the <code>/etc/conf/cf.d/stune</code> file or use
  157.    <code>/etc/conf/cf.d/configure</code> choice 7 (User and
  158.    Group configuration) and modify the <code>NOFILES</code>
  159.    kernel parameter to a suitably higher value. SCO recommends a
  160.    number between 60 and 11000, the default is 110. Relink and
  161.    reboot, and the new number of descriptors will be
  162.    available.</p>
  163.  
  164.   </section>
  165.  
  166.   <section id="tru64"><title>Compaq Tru64 UNIX/Digital UNIX/OSF</title>
  167.  
  168.         <ol>
  169.           <li>Raise <code>open_max_soft</code> and
  170.           <code>open_max_hard</code> to 4096 in the proc subsystem.
  171.           Do a man on sysconfig, sysconfigdb, and
  172.           sysconfigtab.</li>
  173.  
  174.           <li>Raise <code>max-vnodes</code> to a large number which
  175.           is greater than the number of apache processes * 4096
  176.           (Setting it to 250,000 should be good for most people).
  177.           Do a man on sysconfig, sysconfigdb, and
  178.           sysconfigtab.</li>
  179.  
  180.           <li>If you are using Tru64 5.0, 5.0A, or 5.1, define
  181.           <code>NO_SLACK</code> to work around a bug in the OS.
  182.           <code>CFLAGS="-DNO_SLACK" ./configure</code></li>
  183.         </ol>
  184.  
  185.   </section>
  186.  
  187.   <section id="others"><title>Others</title>
  188.  
  189.      <p>If you have details on another operating system, please
  190.      submit it through our <a
  191.      href="http://httpd.apache.org/bug_report.html">Bug Report
  192.      Page</a>.</p>
  193.  
  194.     <p>In addition to the problems described above there are
  195.     problems with many libraries that Apache uses. The most common
  196.     example is the bind DNS resolver library that is used by pretty
  197.     much every unix, which fails if it ends up with a descriptor
  198.     above 256. We suspect there are other libraries that similar
  199.     limitations. So the code as of 1.2.1 takes a defensive stance
  200.     and tries to save descriptors less than 16 for use while
  201.     processing each request. This is called the <em>low slack
  202.     line</em>.</p>
  203.  
  204.     <p>Note that this shouldn't waste descriptors. If you really
  205.     are pushing the limits and Apache can't get a descriptor above
  206.     16 when it wants it, it will settle for one below 16.</p>
  207.  
  208.     <p>In extreme situations you may want to lower the low slack
  209.     line, but you shouldn't ever need to. For example, lowering it
  210.     can increase the limits 240 described above under Solaris and
  211.     BSDI 2.0. But you'll play a delicate balancing game with the
  212.     descriptors needed to serve a request. Should you want to play
  213.     this game, the compile time parameter is
  214.     <code>LOW_SLACK_LINE</code> and there's a tiny bit of
  215.     documentation in the header file <code>httpd.h</code>.</p>
  216.  
  217.     <p>Finally, if you suspect that all this slack stuff is causing
  218.     you problems, you can disable it. Add <code>-DNO_SLACK</code>
  219.     to <code>EXTRA_CFLAGS</code> and rebuild. But please report it
  220.     to our <a href="http://httpd.apache.org/bug_report.html">Bug
  221.     Report Page</a> so that we can investigate. </p>
  222.  
  223.   </section>
  224.  
  225. </manualpage>
  226.