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 ...