Apache2 + PHP 在Windows2000下不穩定解決方案

gudesheng發表於2008-01-03

1  製作一個bat檔案在計劃任務裡面定期(每天夜裡)執行:然後刪除舊的日誌檔案,避免檔案過大
apache -k shutdown

move /Y access_log access_log.old
move /Y error_log error_log.old

apache -k start

2 [httpd.conf]

ThreadsPerChild 250
MaxRequestsPerChild  30 <- 這個可以為100,但最好不要為0
Win32DisableAcceptEx <-這個

3 使用更詳細日誌捕捉當機時訪問的頁面

LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined
記錄refer可以幫助確認發生問題的請求來自什麼頁面,以判斷是否受到攻擊

可以使用"%400,501{User-agent}i"  "%!200,304,302{Referer}i"  來捕捉特定需要的log

4 在計算機管理->效能中,啟動效能日誌和警報->計數器日誌->System Overview。根據一段時間的監測的資料,在系統監視器裡面檢視,找到發生當機的異常時候,記憶體,CPU的極值的規律。然後在警報裡面,如果超過,或接近某個極值,執行重起apache命令。

5 無論如何在你的程式裡面加上快取機制:無論是通過生成靜態html頁面或者設定meta expired為幾分鐘

6 在php.ini裡面,將output_buffering=On 不要設定具體的數值

7 對於檔案下載,使用以下的方法,而不要使用readfile

//readfile($file);
$fd = @fopen($file, rb);
if(!$fd) {
   print "Bad entry: $entry
";
   continue;
}else {
   flock($fd,LOCK_SH);
   $contents = fread($fd, $size);
}
fclose ($fd);

8 為了防止多執行緒下載,給Apache 加上mod_limitipconn

   
 MaxConnPerIP 1
 # In this case, all MIME types other than audio/mpeg and video*
 # are exempt from the limit check
 OnlyIPLimit audio/mpeg video
   



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=565080


相關文章