📄 fd-limits.html
字号:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="Apache, 中文, 手册, 中文版, 中文手册, 中文版手册, 参考手册, 中文参考手册, 金步国" />
<meta name="description" content="Apache 2.2 中文版参考手册" />
<meta name="author" content="金步国" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>文件描述符限制 - Apache 2.2 中文版参考手册</title>
</head>
<body id="manual-page" class="no-sidebar"><div id="page-header">
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./index.html"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
<div id="path"><a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">文档</a> > <a href="../index.html">版本2.2</a> > <a href="./index.html">虚拟主机</a></div>
<div id="translation-info"> <a href="../translator_announcement.html#thanks">致谢</a> | <a href="../translator_announcement.html#announcement">译者声明</a> | 本篇译者:<a href="mailto:csfrank@citiz.net">金步国</a> | 本篇译稿最后更新:2006年1月17日 | <a href="../translator_announcement.html#last_new">获取最新版本</a></div>
<div id="page-content"><div id="preamble"><h1>文件描述符限制</h1>
<p>当使用了大量虚拟主机,而且每个主机又使用了不同的日志文件时,Apache可能会遭遇文件描述符(有时也称为<cite>文件句柄</cite>)耗尽的困境。Apache使用的文件描述符总数如下:每个不同的错误日志文件一个、每个其他日志文件指令一个、再加10-20个作为内部使用。Unix操作系统限制了每个进程可以使用的文件描述符数量。典型上限是64个,但可以进行扩充,直至到达一个很大的硬件限制为止(hard-limit)。</p>
<p>尽管Apache会试着增大限制,但如果发生以下情况,则这个机制无法起作用:</p>
<ol>
<li>您的操作系统没有提供<code>setrlimit()</code>系统调用。</li>
<li><code>setrlimit(RLIMIT_NOFILE)</code>调用无法在您的系统上正常工作(比如 Solaris 2.3)</li>
<li>文件描述符的需求量已经超出了硬件的限制。</li>
<li>您的操作系统对文件描述符作出了其他限制。比如说限制了stdio流只能使用256以下的文件描述符。(Solaris 2)</li>
</ol>
<p>如果遇到了这样的问题,您可以这样解决:</p>
<ul>
<li>减少日志文件的数量。不在<code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>配置段中指定日志文件,而是只在主日志文件中进行记录。(参见下述<a href="#splitlogs">分解日志文件</a>获得详情)</li>
<li>如果您的系统因上述第1条或第2条原因不能正常工作,可以在启动Apache之前,用类似下述的脚本增大文件描述符的限制:
<div class="example"><p><code>
<code>#!/bin/sh<br />
ulimit -S -n 100<br />
exec httpd</code>
</code></p></div>
</li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="splitlogs" id="splitlogs">分解日志文件</a></h2>
<p>如果您想把多个虚拟主机的日志记录到同一个日志文件中,你可能会想事后把它们分开,以对不同的虚拟主机数据进行统计分析。您可用下述方法达到这个目的。</p>
<p>首先,您需要将虚拟主机的信息放入日志中。您可以用<code class="directive"><a href="../mod/mod_log_config.html# logformat">LogFormat</a></code>指令和"<code>%v</code>"变量达到这个目的。在您的日志格式串的开头加入它们:</p>
<div class="example"><p><code>
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost<br />
CustomLog logs/multiple_vhost_log vhost
</code></p></div>
<p>这将用日志的普通格式来创建一个日志文件。但会在每条记录前加上正式的虚拟主机名(就是在<code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>指令中定义的那个)。(参见<a href="../mod/mod_log_config.html#formats">自定义日志格式</a>以获取更多内容)</p>
<p>当您想将日志文件分开(每个虚拟主机一个日志文件)的时候,您可以使用<code><a href="../programs/other.html">split-logfile</a></code>程序来完成这个工作。您将在Apache发行版的<code>support</code>目录中找到这个程序。</p>
<p>用如下命令来运行这个程序:</p>
<div class="example"><p><code>
split-logfile < /logs/multiple_vhost_log
</code></p></div>
<p>当这个程序在给予一个虚拟主机日志文件作为参数的情况下,会为日志文件中的每个虚拟主机建立一个文件。每个文件都以"<code>主机名.log</code>"这样的形式命名。</p>
</div></div>
<div id="footer">
<p class="apache">本文允许自由使用、分发、转载,但必须保留译者署名;详见:<a href="../translator_announcement.html#announcement">译者声明</a>。</p>
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -