apache性能優化

Apache的配置是針對原先較低的服務器來配置的,原先的配置顯然已經不適合了,所以今天開始研究下Apache配置的問題。

1. 首先要了解Apache採用的MPMMulti -Processing Modules,多道處理模塊)
MPM
Apache的核心,它的作用是管理網絡連接、調度請求。

Apache2.0
MPM分爲3種(preforkworkerevent)。preforkApache1.3中繼承下來的,它採用的是進程管 理方式,所以它可以提供更可靠的性能和更好的兼容性;workerApache2.0中新增加的方式,它採用了線程控制方法,可以比prefork更節 約系統開銷、處理更多的數據量,但同時兼容性並不是很好,很多舊的程序無法工作在worker下;event仍處於試驗階段,它爲每個任務分配不同的進程 池,目前不應該採用。
通過命令 httpd -l 可以獲取目前Apache採用的是哪種MPM
本文僅針對prefork方式進行討論

2.
瞭解prefork的工作方式
查看Apache2.0的配置文件httpd.conf,可以看到prefork的配置段,大致如下:

ServerLimit       256
StartServers       5
MinSpareServers   10
MaxSpareServers   15
MaxClients       256
MaxRequestsPerChild  4000

Apache被啓動時,Apache會自動創建StartServers個進程,並且盡力將空閒進程數保持在MinSpareServersMaxSpareServers之間。
如果空閒進程小於MinSpareServersApache將會以大約每秒1個的速度新建進程。
如果空閒進程小於MaxSpareServersApache將會刪除多餘的空閒進程,釋放服務器資源。
進程數的最大值由MaxClients控制,在Apache1.3中最大隻能設置爲256,但在Apache2.0中,可以通過在配置開頭增加ServerLimit項目來突破256的限制,此時必須 MaxClients ≤ ServerLimit ≤ 20000
MaxRequestsPerChild
用來控制每個進程在處理了多少次請求之後自動銷燬,這個參數可以設置爲0表示無限(即不銷燬進程)。

3. 優化prefork
首先,對於一個負載相對較高的網站來說,256的進程限制是不夠的,如果服務器已經達到256的極限,那麼接下去的訪問就需要排隊,這也就是爲什麼某些服務器負載不高,但是訪問卻很慢的原因之一。所以首先應該瞭解服務器在繁忙時的進程數量。
通過命令ps -ef|grep httpd|wc -l可以瞭解到當前系統中Apache進程數,通過設置ServerLimitMaxClients來達到爲服務器軟擴容的目的。

然後,在訪問量高峯期,經常會出現的情況是突然之間發生非常多的併發連 接,然後突然之間減少了很多訪問。如果Apache沒有準備足夠數量的預備進程,那訪問只能等待Apache每秒1個的新增進程,隨後又要將多餘的進程刪 除,那Apache只能一直忙於新建和銷燬進程,大大地降低了訪問速度。可以適當增加StartServersMinSpareServers MaxSpareServers來使得Apache不需要一直忙於作無用功。

最後,強烈推薦MaxRequestsPerChild不要設置爲0,設置爲非0,可以保護Apache進程免遭內存泄漏的影響,因爲你不知道運行在Apache上的應用程式在什麼時候會出錯導致內存泄漏。

設置完之後大致是這樣的:

ServerLimit       1000
StartServers       30
MinSpareServers   30
MaxSpareServers   45
MaxClients       1000

MaxRequestsPerChild  4000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章