Apache HTTP Server 版本2.2

當(dāng)使用了大量虛擬主機(jī),而且每個主機(jī)又使用了不同的日志文件時,Apache可能會遭遇文件描述符(有時也稱為文件句柄)耗盡的困境。Apache使用的文件描述符總數(shù)如下:每個不同的錯誤日志文件一個、每個其他日志文件指令一個、再加10-20個作為內(nèi)部使用。Unix操作系統(tǒng)限制了每個進(jìn)程可以使用的文件描述符數(shù)量。典型上限是64個,但可以進(jìn)行擴(kuò)充,直至到達(dá)一個很大的硬件限制為止(hard-limit)。
盡管Apache會試著增大限制,但如果發(fā)生以下情況,則這個機(jī)制無法起作用:
setrlimit()系統(tǒng)調(diào)用。setrlimit(RLIMIT_NOFILE)調(diào)用無法在您的系統(tǒng)上正常工作(比如 Solaris 2.3)如果遇到了這樣的問題,您可以這樣解決:
<VirtualHost>配置段中指定日志文件,而是只在主日志文件中進(jìn)行記錄。(參見下述分解日志文件獲得詳情)
#!/bin/sh
ulimit -S -n 100
exec httpd
如果您想把多個虛擬主機(jī)的日志記錄到同一個日志文件中,你可能會想事后把它們分開,以對不同的虛擬主機(jī)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析。您可用下述方法達(dá)到這個目的。
首先,您需要將虛擬主機(jī)的信息放入日志中。您可以用LogFormat指令和"%v"變量達(dá)到這個目的。在您的日志格式串的開頭加入它們:
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
CustomLog logs/multiple_vhost_log vhost
這將用日志的普通格式來創(chuàng)建一個日志文件。但會在每條記錄前加上正式的虛擬主機(jī)名(就是在ServerName指令中定義的那個)。(參見自定義日志格式以獲取更多內(nèi)容)
當(dāng)您想將日志文件分開(每個虛擬主機(jī)一個日志文件)的時候,您可以使用split-logfile程序來完成這個工作。您將在Apache發(fā)行版的support目錄中找到這個程序。
用如下命令來運(yùn)行這個程序:
split-logfile < /logs/multiple_vhost_log
當(dāng)這個程序在給予一個虛擬主機(jī)日志文件作為參數(shù)的情況下,會為日志文件中的每個虛擬主機(jī)建立一個文件。每個文件都以"主機(jī)名.log"這樣的形式命名。