標籤:大連 沒有 目的 進程 target rtu 自己的 回收 資料庫
apache中MaxRequestsPerChild參數配置經驗分享MaxRequestsPerChild在apache中是一個非常重要的參數對於網站流量過大機器配置不好的朋友可以通過MaxRequestsPerChild來合理的設定進程與子進程的數量以達到最優的配置,下面一起來看看關於MaxRequestsPerChild參數配置的例子。
MaxRequestsPerChild參數介紹
用 記事本開啟apache2confhttpd.conf,
尋找MaxRequestsPerChild,將MaxRequestsPerChild 0改成MaxRequestsPerChild 50即可。
通常在“Windows工作管理員-進程”中可以看到兩個apache.exe進程,一個是父進程、一個是子進程,父進程接到訪問請求 後,將請求交由子進程處理。
MaxRequestsPerChild這個指令設定一個獨立的子進程將能處理的請求數量。在處理 “MaxRequestsPerChild 數字”個請求之後,子進程將會被父進程終止,這時候子進程佔用的記憶體就會釋放,如果再有訪問請求,父進程會重新產生子進程進行處理。
如果 MaxRequestsPerChild預設設為0(無限)或較大的數字(例如10000以上)可以使每個子進程處理更多的請求,不會因為不斷終止、啟動 子進程降低訪問效率,但MaxRequestsPerChild設定為0時,如果佔用了200~300M記憶體,即使負載下來時佔用的記憶體也不會減少。
記憶體 較大的伺服器可以設定為0或較大的數字。記憶體較小的伺服器不妨設定成30、50、100,以防記憶體溢出
下面看一個例子
從網路上搜尋到一篇文章,說加大 MaxRequestsPerChild 可以促使增加子進程的複用,從而提高效率。不記得那篇文章是否提到了其使用的 Apache 的 MPM ,版本是 2.0 的沒錯,反正不是 woker 就是 prefork 了。
我使用的 prefork ,參考那篇文章,將 MaxRequestsPerChild 由 300 調整到了 3000 。
結果,後兩天的監控結果是,在網站訪問期的高峰期,伺服器負荷很重,資料庫的並發串連頻頻超過最高限制。Apache 的並發串連也幾乎一直保持在最高,網站訪問速度很慢,頻繁出現訪問逾時的問題。
最開始以為是網站訪問量過大,達到伺服器硬體極限導致的正常現象,不過,手動重啟 Apache 後,資料庫並發串連迅速降低,之後緩慢增加,一直達到最高並發串連限制,並且很長時間無法減小。
之後,認為是資料庫並發串連過高,導致系統負荷過大,而 Apache 過多的 KeepAlice 串連導致資料庫的並發串連無法及時釋放從而消耗大量系統資源,導致系統負荷過重。
最後,懷疑到 MaxRequestsPerChild 的 300 設定是否合理。
閱 讀 Apache 手冊關於 MaxRequestsPerChild 的說明後,認為 prefork 下,KeepAlice 開啟的情況下,每一個新串連都會導致一個 Apache 子進程開啟, MaxRequestsPerChild 設定過大,導致新串連產生新的子進程後,長期 idle ,這樣並不一定合理。
根據網站的訪問情況,並不需要那麼大的 MaxRequestsPerChild ,用戶端和 Apache 採用 http 進行串連,網站都是一些大小不大的檔案,用戶端在和 Apache 伺服器數次互動後,就應該完成一次訪問了,使用者點擊網站的頻率也不會那麼高,所以 MaxRequestsPerChild 不應該設定那麼高,而應該設定低一些,以儘快釋放資料庫連接,儘快回收系統資源,以儘可能快速的滿足新的請求的串連需求。
將 MaxRequestsPerChild 重新調整回預設的 300 ,情況有所改觀。
最後,就像那句古話所說的,盡信書不如無書,換到互連網上也一樣。不能盲目的參考網上的資料,特別是非嚴格發表的個人經驗文檔。網上的資料始終都只能作為參考,必須要經過自己的理解,再結合實際情況,進行調整。不然,導致的結果可能是無法預計的。
MaxRequestsPerChild 與 keepalive的關係
MaxRequestsPerChild 表示一個httpd進程最多服務多少個請求,然後自動結束
keepalive 表示串連可以複用
這兩個參數看似沒有什麼關係,可是最近一個偶然的事情卻把這兩個參數扯到了一起。
這裡面的微妙關係就是:MaxRequestsPerChild 在統計服務了多少個請求的時候,把開一次連結作為一個請求。
這意味什麼呢?是考慮,如果你的請求都頻繁的、不間斷的來自一個用戶端,這樣的話,串連將會被一直被複用,
然後處理過的請求個數將永遠不會超過MaxRequestsPerChild,但是可能每次的請求都會帶來一定的記憶體增長,時間長了記憶體也就永遠不會被釋放。
所以,如果想 MaxRequestsPerChild 起到回收資源的作用,那麼請把keepalive設定成off。
例子
對於 Apache 架設的伺服器,在遇到連線數問題上,以下參數是會考慮微調的
這是預設
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
不過遇到多個 VirtualHost 與連線變多時,需要適時調整
可能是這樣子
ServerLimit 300
MaxClients 300
MaxRequestsPerChild 3000
ServerLimit 與 MaxClients 是針對同時間最大連線數?槎嗌伲?駁褥妒 Apache 程式數量,ps 一下就會有多少個 /usr/sbin/httpd 等
而 MaxRequestsPerChild 則是一個 Apache 子程式可以接受多少個 Request 量,等達到上限了就會被中斷砍掉,再重新?生一個新的子程式
Timeout 是不是也要調,預設 120 秒,調 60 好了
以上資訊部分來自網路.同時也感謝網友的分享,如對文章有疑問。可聯絡本人刪貼。
apache伺服器httpd.exe進程佔用cpu100%