
我正在 MediaTemple (dv) 伺服器上使用 mpm_prefork 運行 Apache2。最近我的伺服器設定沒有發生重大變化。 httpd.conf 目前設定為以下內容:
MaxKeepAliveRequests 200
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 10
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>
但在 apache 完全崩潰之前我收到以下錯誤:
[Thu Jun 04 18:30:24 2009] [warn-phpd] mmap cache can't open /var/www/vhosts/mydomain.com/httpdocs/filename.php - Too many open files in system (pid 19873)
當 Apache 崩潰時,我對照顧這台伺服器以重新啟動它感到惱火。幫助?
答案1
我建議你嘗試加入這樣的行ulimit -n 16384到文件頂部/等/預設/apache2然後重新啟動。
另請參閱此關聯。
答案2
取自「人進程」:
/proc/sys/fs/檔案最大 該檔案定義了所有進程開啟檔案數量的系統範圍限制。 (另請參閱 setrlimit(2),進程可以使用它來設定每個進程可以開啟的檔案數量的限制 RLIMIT_NOFILE。)如果您收到大量有關檔案句柄耗盡的錯誤訊息,請嘗試增加此值:
echo 100000 > /proc/sys/fs/file-max The kernel constant NR_OPEN imposes an upper limit on the
可以放置在 file-max 中的值。
If you increase /proc/sys/fs/file-max, be sure to
將 /proc/sys/fs/inode-max 增加到 /proc/sys/fs/file-max 新值的 3-4 倍,否則您將耗盡 inode。
**/proc/sys/fs/file-nr** This (read-only) file gives the number of files
目前已開業。它包含三個數字:分配的文件句柄數;空閒文件句柄的數量;以及文件句柄的最大數量。核心動態分配檔案句柄,但不會再次釋放它們。如果分配的檔案數接近最大值,則應考慮增加最大值。當可用文件句柄的數量很大時,您會遇到文件句柄使用量的峰值,並且您可能不需要增加最大值。
第二個數字值得一看,看看第一個數字是否是您需要增加的數字。如果是這樣,您可以在 /etc/sysctl.conf 中設定它:
fs.file-max=512000
請注意,這設定了系統限制;每個用戶的限制是用“ulimit”設定的,您已經表示您對此很熟悉。
答案3
檢查 lsof 看看到底發生了什麼事。超過不合理的高限通常是由於洩漏或其他錯誤造成的。
答案4
在啟動 apache 之前嘗試執行“ulimit -n 8192”。它可能已達到最大開啟檔案限制。