linux 網站架設調優Apache(三)

擴展:expires模塊的語法

上面已經的操作就是實現apache的緩存功能。其中,expires後面的參數你也可以根據需求自行更改,緩存時間也是一樣可以更改的。

這裏我對expires的模塊語法進行一些細說

expires模塊用到了ExpiresDefault和EXpiresByType兩個指令,下面是這兩個指令的語法。


ExpiresDefault “<base> [plus] {<num><type>}*”

EXpiresByType type/encoding "<base> [plus] {<num><type>}"

其中<base>的參數有3個:access,now(等價於‘access’),modification

plus關鍵字是可選的。

<num>必須是整數,確保可以atoi()所接收。(atoi可以把字符串轉換成長整型數)

<type>參數類型:years,months,weeks,days,hours,minutes,seconds

下面用幾個例子帶大家理解下

例如:下面3個指令都表示文檔默認的有效期是一個月


ExpiresDefault "access plus 1 month"

ExpiresDefault "access plus 4 weeks"

ExpiresDefault "access plus 30 days"

有效期可以通過增加“<num><type>”子句進一步調整

ExpiresByType text/html "access plus 1 month 15 days 2 hours"

ExpiresByType image/gif "modification plus 5 hours 3 minutes"

注意:如果你使用基於最後修改日期的設置,“Expires”頭將不會被添加到那些並非來自於硬盤文件的內容,這是因爲這些內容並不存在“最後修改時間”的屬性。

基準時刻可以是源文件的最後修改時刻或者客戶端對源文件的訪問時刻,至於使用那一個則由<code>指定。“M”表示源文件的最後修改時刻,“A”表示客戶端對源文件的訪問時刻,需要注意的是<code>和seconds之間沒有空格。

這兩個基準的差別是很微妙的。如果使用“M”,所有當前緩存中的文檔副本都將在同一時刻過期,這個可能對定期更新的URL(比如位於同一位置的每週通告)很有好處。如果使用“A”,則每個客戶端所得到的有效期是不一樣的,這個可能對那些幾乎不更新的圖片很有好處,特別是對於一組都引用相同圖片的相關文檔。

 

緩存優化對企業來說是至關重要了的,不同的公司類型,緩存的類型和時間又各不相同,大傢俱體可以用YSlow對淘寶,京東,新浪,谷歌等站點進行測試,看看他們的緩存時間是多少,並思考下爲什麼那樣設置。

雖然緩存的設置有如下優點

1.縮短服務的響應時間

2.減輕服務器負擔

3.減少網絡帶寬使用量,降低企業成本

但是他的缺點也是顯而易見的,由於使用了緩存設置,導致被緩存的內容更新了,但是客戶看到的卻還是舊的。

如何解決被緩存文件及時更新這個問題呢?


1.

第一種:縮短緩存時間例如:1天,不徹底犧牲性能

2.

第二種:對緩存的對象改名。

九、啓用worker模式,提升併發數(可以達到2000-5000)

apache有兩個模式,默認的模式是prefork模式。那麼我們爲什麼要使用worker模式呢?這兩種模式又有什麼區別呢?

1、prefork模式

prefork使用的是多個子進程,而每個子進程只有一個線程,每個進程在某個確定的時間只能維持一個連接。

工作原理:控制進程最初建立若干個子進程,爲了不在請求到來時再生成子進程,所以要根據需求不斷的創建新的子進程,最大可以達到每秒32個直到滿足需求爲止。

安裝方法:在編譯的過程中,加入參數--with-mpm=frefork,不加也可以,因爲默認的話,會採用prefork模式。

優點:效率高,穩定,安全。對於線程調試困難的平臺來說,調試更加容易些。

缺點:與worker模式相比消耗資源多。

配置參數說明:


&lt;/IFModule mpm_prefork_module&gt;

StartServers               5     #最初建立的子進程

MinSpareServers       5      #最小空閒進程數,如果空閒的進程小於設定值,Apache會自動建立進程,如果服務器併發及負載大的話,可以考慮加大。

MaxSpareServers      10    #最大空閒進程數,如果空閒的進程大於設定值,Apache會自動kill掉多餘的進程,如果服務器負載大的話,可以考慮加大。

MaxClients                150     #設定的是apache可以同時處理的請求,是對apache性能影響最大的參數,就是apache可以同時處理的請求數,就是說,如果有150個用戶在訪問,那麼第151個用戶就要等之前的訪問結束後才能訪問。

MaxRequestsPerChild    0    #每個子進程可處理的請求數,每個子進程在處理了“MaxRequestsPerChild”個請求後將自動銷燬。0以爲着無限,即子進程永不銷燬。雖然缺省設爲0可以使每個子進程處理更多的請求,但如果設置成非0值也有兩點重要的好處。(1)可防止意外的內存泄露(2)在服務器負載下載的時候會自動減少子進程數。

&lt;/IFModule&gt;

生產環境配置實例1:


 

</IFModule mpm_prefork_module>

StartServers               10

MinSpareServers            10

MaxSpareServers            15

ServerLimit                2000

MaxClients                 1000

MaxRequestsPerChild        5000

</IFModule>;

2、worker模式

worker模式是apche2.x新引進來的模式,是線程與進程的結合,在worker模式下會有多個子進程,每個子進程又會有多個線程。每個線程在某個確定的時間只能維持一個連接。

工作原理:由主控制進程生成若干個子進程,而每個子進程中又包含固定的線程數,各個線程獨立處理請求,同樣爲了不在請求到來時再生成線程,在配置文件中設置了最小和最大的空閒線程數及所有子進程中的線程總數,如果現有子進程中的線程總數不能滿足併發及負載,控制進程將派生新的子進程。

安裝方法:在配置編譯的工程中,加入參數--with-mpm=worker,如果不加的話系統會採用默認prefork模式。

優點:內存佔用比prefork模式低,適合高併發高流量HTTP服務。

缺點:假如一個線程崩潰,整個進程就會連同其任何線程一起“死掉”。由於線程共享內存空間,所以一個程式在運行時必須被系統識別爲“每個線程都是安全的”。服務穩定性不如prefork模式。

配置參數說明:

</IFModule mpm_worker_module>

StartServers                    2  #最初建立的子進程

MaxClients                     150   #所有子進程中的線程總數。如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程。

MinSpareThreads           25    #最小空閒線程數,如果空閒的線程小於設定值,apache會自動建立線程,如果服務器負載大的話,可以考慮加大此參考值。

MaxSpareThreads            75    #最大空閒線程數,如果空閒的線程大於設定值,apache會自動kill掉多餘的線程,如果服務器負載大的話,可以考慮加大此參考值。

ThreadsPerChild               25    #每個進程包含固定的線程數,此參數在worker模式中,是影響最大的參數,ThreadsPerChild的最大缺省值是64,如果負載較大,64是不夠的。這時要顯式使用threadlimit指令,它的最大缺省值是20000.

MaxRequestsPerChild    0    #功能同prefork模式

</IFModule>

常用配置參考:

生產環境配置實例1:


</IFModule mpm_worker_module>

StartServers             3

MaxClients               2000

ServerLimit              25

MinSpareThreads          50

MaxSpareThreads          200

ThreadLimit              200

ThreadsPerChild          100

MaxRequestsPerChild      0

</IFModule>

生產環境配置實例2:


 

</IFModule mpm_worker_module>

StartServers              5

MaxClients                9600

ServerLimit               64

MinSpareThreads           25

MaxSpareThreads           500

ThreadLimit               200

ThreadsPerChild           150

MaxRequestsPerChild       0

</IFModule>

生產場景配置實例3:



</IFModule mpm_worker_module>

StartServers               2

MaxClients                 500

ServerLimit                25

MinSpareThreads            25

MaxSpareThreads            75

ThreadsPerChild            25

MaxRequestsPerChild        0

</IFModule>

生產場景配置實例4:

 

</IFModule mpm_worker_module>

StartServers              3

MaxClients                1600

ServerLimit               25

MinSpareThreads           50

MaxSpareThreads           200

ThreadLimit               200

ThreadsPerChild           64

</IFModule>

worker模式下所能同時處理的請求總數是由子進程總數乘以Threadsperchild值決定的,應該大於等於maxclients。如果負載很大,現有的子進程數不能滿足時,控制進程會派生新的子進程。默認最大的子進程總數是16,如需加大時也需要顯示聲明serverlimit的值(最大值是20000)

特別說明:如果顯示聲明瞭ServerLimit,那麼它乘以ThreadsPerChild的值必須大於等於MaxClients,而且MaxClients必須是ThreadsPerChild的整數倍,否則apache將會自動調節到一個相應值(可能是個非期望值)。

數學表達:


1.

MaxClient&lt;=總的進程數(ServerLimit)x線程數(ThreadsPerChild)

2.

MaxClient%ThreadsPerChild=0

生產環境中我們需要開啓httpd-mpm.conf配置行,這樣才能實現併發鏈接數的增加。

1、開啓httpd-mpm.conf配置行

這裏我們要apache的主配置文件httpd.conf,找到包含httpd-mpm.conf的行,並解開註釋


1.

[root@c64-web /]# grep "httpd-mpm.conf" /usr/local/apache/conf/httpd.conf

2.

#Include conf/extra/httpd-mpm.conf

3.

[root@c64-web /]# sed -i 's#\#Include conf/extra/httpd-mpm.conf#Include conf/extra/httpd-mpm.conf#g' /usr/local/apache/conf/httpd.conf

注意:編譯安裝的,只有此行解開註釋了,後面的修改才能生效。

2、修改httpd-mpm.conf配置

1)如果你的apache服務爲worker模式,那麼生產環境中可以選擇上面worker模式的生產環境配置實例1的配置。

2)如果你的apache服務爲prefork模式,那麼生產環境中可以參考上面prefork模式的生產環境配置實例1的配置。

生產環境中,這裏我建議大家選擇worker模式。


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