:::
主內容區域
7-1 Prefork 模式
prefork模式是古老穩定的模式。Apache在啟動之初,就預先產生一些子進程,然後等待請求進來,以減少頻繁創建和銷毀進程的開銷。每個子進程只有一個線程,在一個時間點內,只能處理一個請求。
- 優點:成熟穩定,兼容所有新老模塊。同時,不需要擔心線程安全的問題。
- 缺點:一個進程相對佔用更多的系統資源,消耗更多的記憶體。而且,它並不擅長處理高並發請求,在這種場景下,它會將請求放進隊列中,一直等到有可用進程,請求才會被處理。
- 編輯mpm_prefork設定檔
vi /etc/apache2/mods-available/mpm_prefork.conf - 建議內容如下:
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 1000 MaxRequestWorkers 750 MaxConnectionsPerChild 3000 </IfModule>- StartServers:一開始建立的子進程數#推薦設置:小=默認 中=20~50 大=50~100
- MinSpareServers:最小數量的服務器進程,保存備用(達此數就不再主動建立新的進程,如果站點負載較大,可加大此值)推薦設置:與StartServers保持一致
- MaxSpareServers:最大數量的服務器進程,保存備用(空閒進程數大於此值時,Apache會自動kill掉一些多餘進程。故不要設得過大,如果站點負載較大,可加大此值)#推薦設置:小=20 中=30~80 大=80~120
- MaxRequestWorkers:最為重要的一個, Apache可以同時處理的請求數,是對Apache性能影響最大的參數。舊名MaxClients ,若連接數(
ps -ef|grep apache2|wc -l)大於此值時,就會開始排隊#推薦設置:小=500 中=500~1500 大型=1500~3000( 如果最大請求進程數超過256需要在MaxRequestWorkers參數前添加參數ServerLimit並且指定最大並發數,該參數最好與MaxRequestWorkers的值保持一致。 ) - MaxConnectionsPerChild:設置的是每個子進程可處理的請求數(0意味著子進程永不銷毀,但不建議,舊名MaxRequestsPerChild )#推薦設置:小=10000 中或大=10000~500000
- 儲存後,重啟 Apache
service apache2 restart - 修改核心參數,解決WAIT_TIME過多問題:
vi /etc/sysctl.conf - 加入以下四行:
net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30
7. Apache的設定及優化