運行Lighttpd的背後 Apache來提供靜態文件當然似乎新空房禁地到我。 Apache仍然需要解包HTTP數據包,並通過解析樹解析請求,發送代理請求,然後Lighttpd必須重新解包,命中文件系統並通過Apache發回文件。我從來沒有聽說有人在生產中使用這種設置。
你會發現,人們使用輕量級網絡服務器,如Nginx作爲前端服務器,以向Apache提供靜態文件和代理動態URL。或者,您可以運行Varnish或Squid作爲緩存反向代理前端,以便您所有高流量的靜態文件(即圖像,CSS等和您願意發送緩存友好標題的任何動態頁面)都是內存不足。
也可以優化Apache以提供靜態文件 - 通常當我聽到人們抱怨Apache時,他們真的不知道如何配置它。他們只使用過prefork MPM(與線程或工作者)並且啓用了各種模塊(通常它們是從Linux發行版的廚房接收器Apache包運行的,它將所有內容構建爲模塊,並默認啓用10-20模塊或更多)。首先關閉不需要的模塊/愚蠢功能,例如支持.htaccess(它使Apache在每個請求上掃描文件系統!),從而調整Apache。 (你也可以運行Apache的兩個實例,用一個「輕量級」的Apache作爲前端代理動態請求的「重」Apache ...也許你的前端是線程化的,但是你的後端是prefork,因爲你必須運行線程不安全外部模塊,比如mod_php的)
回覆:
既然你還有一個Apache進程 催生了爲每一個在談到 要求,請問如何積極影響 負荷?從我可以看到,通過lighttpd代理其 請求的Apache進程的大小 與如果它服務於 文件本身一樣大 。
如果您在每個請求中產生進程,那麼這意味着您正在使用prefork MPM。請記住,當操作系統報告每個進程的內存使用情況時,並不是所有內存都是有線的,但很多這些進程是空閒的。而當你談論速度時,你更關心請求解析和給定請求的內部代碼分支(服務器執行多少處理?),而不是操作系統報告的內存使用情況。例如,如果你啓用了類似mod_php的東西,那麼每個工作進程將立即增加大約20-40M(取決於你的PHP解釋器啓用了什麼),但這並不意味着Apache是在靜態請求中使用該內存。當然,如果你正在優化你的服務器以獲得最小的靜態文件的併發性,那麼啓用mod_php仍然會非常糟糕,你無法將幾乎所有的prefork進程放入RAM中。
我也許可以想出一個「噩夢配置」爲Apache是將使之能更慢提供靜態文件的時間比進行代理這些請求到後端Lighttpd的,但它會涉及使像Apache中的.htaccess昂貴的功能,在Lighttpd中被禁用,所以它不太公平。
CGI進程將消耗其餘的差異;) 這根本不會有所作爲。 – 2009-04-22 13:35:55