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