日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache之三种工作模式和配置性能优化

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache之三种工作模式和配置性能优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1?Apache的3種模式和版本

?Apache目前一共有三種穩定的MPM(Multi-Processing Module,多進程處理模塊)模式,它們分別是preforkworkerevent
我們可以使用httpd -V 命令查看apache的版本和模式,如果你服務端允許了apache,你先用httpd -V試下,如果提示如下

-bash: httpd: command not found

那就先找到運行的httpd進程,ps -ef | grep httpd,然后直接用這個進程的全路徑進行-V操作

/**/**/apache_portal/bin/httpd -V AH00318: WARNING: MaxRequestWorkers of 20000 would require 100 servers andwould exceed ServerLimit of 60, decreasing to 12000.To increase, please see the ServerLimit directive. Server version: Server/2.4.18 (Unix) Server built: Jul 21 2017 08:43:23 Server's Module Magic Number: 20120211:52 Server loaded: APR 1.5.2, APR-UTIL 1.5.4 Compiled using: APR 1.5.2, APR-UTIL 1.5.4 Architecture: 64-bit Server MPM: worker

這里我們可以知道apache的模式是worker模式,然后版本是2.4.18

1)prefork模式

Prefork MPM優點:先預派生一些子進程,然后等待連接;可以減少頻繁創建和銷毀進程的開銷,每個子進程只有一個線程,在一個時間點內,只能處理一個請求不需要擔心線程安全問題

缺點:一個進程相對占用資源,消耗大量內存,不擅長處理高并發

?

2)worker模式

worker使用了多進程和多線程的混合模式,worker模式也同樣會先預派生一些子進程,然后每個子進程創建一些線程,同時包括一個監聽線程,每個請求過來會被分配到一個線程來服務。線程比起進程會更輕量,因為線程是通過共享父進程的內存空間,因此,內存的占用會減少一些,在高并發的場景下會比prefork有更多可用的線程,表現會更優秀一些;另外,如果一個線程出現了問題也會導致同一進程下的線程出現問題,如果是多個線程出現問題,也只是影響Apache的一部分,而不是全部。由于用到多進程多線程,需要考慮到線程的安全,在使用keep-alive長連接的時候,某個線程會一直被占用,即使中間沒有請求,需要等待到超時才會被釋放(該問題在prefork模式下也存在)

?

3)event模式

它和worker模式很像,不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題,在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢后,又允許它釋放。這增強了在高并發場景下的請求處理。

?

4)我們看下httpd平均占用內存的大小

ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}' 11792.7

差不多11M

?

?

?

?

?

2??Apache的配置和性能優化

Apache的配置文件httpd.conf的配置方式如下,不同的模式標簽不一樣,但是里面的參數類似

prefork模式部分配置如下

<IfModule mpm_prefork_module>StartServers 5MinSpareServers 5MaxSpareServers 10MaxRequestWorkers 250MaxConnectionsPerChild 1000 </IfModule>

worker模式部分配置如下

<IfModule mpm_worker_module>StartServers 3ServerLimit 16MinSpareThreads 75MaxSpareThreads 250ThreadsPerChild 25MaxRequestWorkers 400MaxConnectionsPerChild 1000 </IfModule>

event模式部分配置如下

<IfModule mpm_event_module>StartServers 3ServerLimit 16MinSpareThreads 75MaxSpareThreads 250ThreadsPerChild 25MaxRequestWorkers 400MaxConnectionsPerChild 1000 </IfModule>

1)StartServers

服務器啟動時建立的子進程數量

?

?

2)ServerLimit

系統配置的最大進程數量

?

3)MinSpareServers

空閑子進程的最小數量,比如默認5;如果當前空閑子進程數少于MinSpareServers ,那么Apache將以最大每秒一個的速度產生新的子進程,此參數不要設的太大.

?

4)MaxSpareServers

空閑子進程的最大數量,默認10;如果當前有超過MaxSpareServers數量的空閑子進程,那么父進程會殺死多余的子進程。這參數也不需要設置太大,如果你將其設置比MinSpareServers 小,Apache會自動將其修改為MinSpareServers +1的數量。

?

5)MinSpareThreads

空閑線程數最小數,這里默認是75

?

6)MaxSpareThreads

空閑線程數最大數,這里默認是250

?

7)?ThreadsPerChild

每個子進程固定產生的線程數量。

?

8)MaxRequestWorkers/MaxClients

限定服務器同一時間內客戶端最大接入的請求數量MaxRequestWorkers/MaxClients設置了所有子進程中的線程總數。如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程。

Apache2.3.1版本之前這參數MaxRequestWorkers被稱為MaxClients,

?

9)MaxConnectionsPerChild/MaxRequestsPerChild

每個子進程在其生命周期內允許最大的請求數量,如果請求總數已經達到這個數值,子進程將會結束,如果設置為0,子進程將永遠不會結束。

MaxConnectionsPerChild在Apache2.3.9之前稱之為MaxRequestsPerChild,我們可以看如下解釋

?

?

?

worker的工作原理是,由主控制進程生成“StartServers”個子進程,每個子進程中包含固定的ThreadsPerChild線程數,各個線程獨立地處理請求。同樣,為了不在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設置了最少和最多的空閑線程數;而MaxClients設置了所有子進程中的線程總數。如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程。

MinSpareThreads和MaxSpareThreads的最大缺省值分別是75和250。這兩個參數對Apache的性能影響并不大,可以按照實際情況相應調節

總結

以上是生活随笔為你收集整理的Apache之三种工作模式和配置性能优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。