大記憶體下Apache的優化配置

2021-09-24 12:45:17 字數 3659 閱讀 6609

1、目的:

通過對大記憶體下apache的配置優化使得記憶體利用率、效能提公升最大化。

2、課題:

基本環境:

系統:首先大記憶體情況下我們預設最小「大記憶體」應超過4g,所以必須選擇64bit centos。

記憶體:4g-8g

apache版本:apache 2.2

2.1 mpm(multi -processing modules,多道處理模組):

apache 2.x 系列最引人注目的就是mpm帶來的效能改善。通過不同的mpm,apache可以執行在一種多程序與多執行緒相混合的模式下,增強配置的可擴充性能。

通過 ./configure –help |grep mpm 我們可以知道當前的apache支援以下幾種mpm:

beos // beos系統預設mpm

mpmt_os2 // os/2上預設mpm

perchild // 被設計用作不同組不同身份的使用者執行不同的子程序

leader、event  與 threadpool  //均為worker變體,暫時還穩定,官方不推薦使用。

prefork  //最常用的mpm之一

worker  //最常用的mpm之一

prefork:

如果不顯式地在configure中加入—with-mpm,在linux預設安裝的是prefork,

安裝完apache後可以用httpd –l來檢視安裝的模組。預設的httpd.conf檔案中應該包含以下內容:

startservers 5

minspareservers 5

maxspareservers 10

maxclients 150

maxrequestsperchild 0

以上配置檔案為apache在啟動的時候,在程序最初的時候建立5 (startservers)個子程序後,為了滿足minspareservers設定的10需要按指數級增加建立新的程序,例如建立1個程序,再建立2個程序,再建立4個程序,最高為32個/秒,直到滿足 minspareservers設定的值為止。prefork是預派生程序,可以不必在請求到來時再產生新的程序,從而減小了系統開銷及增加效能。如果空閒程序數大於maxspareservers,apache會自動kill掉一些多餘程序。

每個prefork出來的httpd子程序在處理了「maxrequestsperchild」(預設0為無限.)個請求後程序將被系統自動**。為了防止可能的記憶體溢位,應跟據伺服器的負載來設定乙個上限。

maxclients設定了apache同時處理的請求,此引數對apache效能的影響最大。通過pgrep httpd | wc -l,如果已經達到maxclients設定值,設定值後的請求就要排隊。apache預設的限制不能大於256。在apache 2.x系列中新加入了serverlimit指令,無須重編譯apache就可以加大maxclients。

startservers 30

minspareservers 45

maxspareservers 45

serverlimit 20000

maxclients 20000

maxrequestsperchild 10000

serverlimit的最大值是20000,如果一定要再加大這個值,在原始碼包裡面找到server/mpm/prefork/prefork.c進行以下修改:

#define default_server_limit 256

該引數即apache預設maxclients的最大值,超過這個值apache不啟動.

#define max_server_limit 20000

該引數即serverlimit的最大值。其中maxclients不能大於serverlimit

worker: 

worker是2.x 系列中全新的支援多執行緒和多程序混合模型的mpm。由於使用執行緒來處理,所以可以處理相對海量的請求,而系統資源的開銷要小於基於程序的prefork的伺服器。worker也使用了多程序,每個程序又生成多個執行緒,以獲得基於程序伺服器的穩定性。

在configure -with-mpm=worker安裝完成後, httpd.conf預設有以下配置:

startservers 2

maxclients 150

minsparethreads 25

maxsparethreads 75

threadsperchild 25

maxrequestsperchild 0

由主控制程序生成「startservers」個子程序,每個子程序中包含固定的threadsperchild執行緒數。同樣,為了不在請求到來時再生成執行緒,minsparethreads和maxsparethreads設定了最少和最多的空閒執行緒數,這兩個引數並非像prefork的引數中那麼重要,對效能的影響並不像prefork中那麼明顯,最大可以設定大75和150;

maxclients設定了所有子程序中的執行緒總數。如果現有子程序中的執行緒總數不能滿足負載,控制程序將派生新的子程序。

threadsperchild是worker mpm中與效能相關最密切的指令。threadsperchild的最大預設值是64,如果負載較大,64也是不夠的。這時要顯式使用 threadlimit指令,它的最大預設值是20000。上述兩個值位於原始碼樹server/mpm/worker/worker.c中的以下兩行:

#define default_thread_limit 64

threadsperchild

#define max_thread_limit 20000

threadlimit

worker模式下所能同時處理的請求總數是由子程序總數乘以threadsperchild值決定的,應該大於等於maxclients。如果負載很大,現有的子程序數不能滿足時,控制程序會派生新的子程序。預設最大的子程序總數是16,加大時也需要顯式宣告serverlimit(最大值是 20000)。這兩個值位於原始碼樹server/mpm/worker/worker.c中的以下兩行:

#define default_server_limit 16

#define max_server_limit 20000

startservers 4

maxclients 4000

serverlimit 40

minsparethreads 50

maxsparethreads 200

threadlimit 400

threadsperchild 100

maxrequestsperchild 10000

其中要滿足

serverlimit x threadsperchild > maxclients

maxclients mod threadsperchild = 0

2.2 細節配置:

rewrite如果非必要盡量寫在httpd-vhost.conf中,這樣每次啟動載入一次規則即可,開啟.htaccess allowoverride後,每次url請求都要遍歷上級目錄查詢該檔案,找到後匯入,再載入。在訪問量巨大的情況下,能節省一筆不小的效能開銷。

伺服器如較多,就直接開啟keepalive。

3.總結:

在大記憶體下對apache效能上的提公升主要還是在於mpm的選擇和mpm的引數除錯上。對於記憶體數應該具體通過各個mpm進行記憶體消耗計算,總消耗應不大於總記憶體。否則會導致記憶體溢位錯誤。

APACHE優化之apache的記憶體使用

keepalive引數 keepalivetimeout這個引數決定了,在什麼都不做之前,乙個http程序能夠等待多長時間?設想一下,如果keepalive設定為on,而keepalivetimeout設定為乙個比較大的數字,apache占用記憶體會很快的增長。這是因為,乙個apache程序完成了乙...

PyCharm 如何修改配置大記憶體

現在的電腦標配都8g以上記憶體了,不過很多ide仍然是以低配電腦為標準,去配置軟體占用硬體的程度 因為記憶體會直接影響到軟體的效能,可以通過手動去設定大記憶體 開啟檔案管理器,進入到pycharm的目錄 進入bin目錄,可以看到2個以vmoptions為字尾的檔案 如果你的是64位系統,則開啟pyc...

Apache優化配置詳解

apache主配置檔案 設定伺服器的基礎目錄,預設為apache安裝目錄 serverroot usr local apache 2.2.6 設定伺服器監聽的ip和埠 listen 80 設定管理員郵件位址 設定伺服器用於辨識自己的主機名和埠號 servername www.uenu.com 80 ...