Linux有兩種工作模式(Prefork / Worker)。 當(dāng)每個請求必須獨立時,系統(tǒng)默認為Prefork模式(無線程,預(yù)調(diào)度),最好的MPM(多路復(fù)用模塊)。 這樣,一個請求問題不會影響其他要求,并且具有很強的自我調(diào)節(jié)能力。
使用命令httpd –t 即可以看到系統(tǒng)工作模式。Prefork模式由一個單獨的控制進程(父進程)負責(zé)產(chǎn)生子進程。
在worker模式下:
./configure --prefix=/usr/local/httpd --enable-so --with-mpm=worker --enable-cgi --enable-charset-lite --enable-首先在/usr/local/httpd/conf/httpd.conf
apache主配置文件中將“Include conf/extra/httpd-mpm.conf”去注釋
線程和進程的區(qū)別:
一:線程與進程
1.概念
線程:是程序執(zhí)行流的最小單元,是系統(tǒng)獨立調(diào)度和分配CPU(獨立運行)的基本單位。
進程:是資源分配的基本單位。一個進程包括多個線程。
2.區(qū)別:
1.線程與資源分配無關(guān),它屬于某一個進程,并與進程內(nèi)的其他線程一起共享進程的資源。
2.每個進程都有自己一套獨立的資源(數(shù)據(jù)),供其內(nèi)的所有線程共享。
3.不論是大小,開銷線程要更“輕量級”
4.一個進程內(nèi)的線程通信比進程之間的通信更快速,有效。(因為共享變量)
二.多線程與多進程
多線程:同一時刻執(zhí)行多個線程。用瀏覽器一邊下載,一邊聽歌,一邊看視頻,一邊看網(wǎng)頁。
多進程:同時執(zhí)行多個程序。如,同事運行World,QQ,及各種瀏覽器。
三.并發(fā)與并行
并發(fā)當(dāng)有多個線程在操作時,如果系統(tǒng)只有一個CPU,則它根本不可能真正同時進行一個以上的線程,它只能把CPU運行時間劃分成若干個時間段,再將時間 段分配給各個線程執(zhí)行,在一個時間段的線程代碼運行時,其它線程處于掛起狀。這種方式我們稱之為并發(fā)(Concurrent)。
并行:當(dāng)系統(tǒng)有一個以上CPU時,則線程的操作有可能非并發(fā)。當(dāng)一個CPU執(zhí)行一個線程時,另一個CPU可以執(zhí)行另一個線程,兩個線程互不搶占CPU資源,可以同時進行,這種方式我們稱之為并行(Parallel)。
強烈注意:多核,多cup,多機是不同的概念。
Prefork工作方式: prefork (多進程預(yù)處理) worker:(多進程多線程)
Prefork工作方式
Prefork工作方式
此配置項在/usr/local/httpd/conf/extra/httpd-mpm.conf
其中:ServrLimit表示:最大進程數(shù)
ThreadLimit表示: 每個子進程的最大線程數(shù)
StartServers表示:服務(wù)器啟動時建立的子進程數(shù)。
MinSpareThreads表示:最小空閑線程數(shù)
MaxSpareTheads表示:最大空閑線程數(shù)
ThreadsPerChild表示:每個子進程建立的常駐執(zhí)行線程數(shù)
MaxRequestsPerChild表示:設(shè)置每個子進程在其生存期內(nèi)允許服務(wù)的最大請求數(shù)量。設(shè)置為0,子進程永遠不會結(jié)束。
優(yōu)化完畢后 ab –n2000 –c800 www.kgc.com/ 對web服務(wù)worker工作模式下的測試
-n 測試會話中所執(zhí)行的請求總數(shù),默認時僅執(zhí)行一個請求
-c并發(fā)產(chǎn)生的請求個數(shù)。默認是一次一個
-t測試所進行的最大秒數(shù)
-v設(shè)置顯示信息的詳細程度
Ab壓力測試結(jié)果各項參數(shù)的意義:
Server Software http響應(yīng)數(shù)據(jù)的頭信息
Server Hostname 請求的url中的主機名稱
Server Port Web服務(wù)器軟件的監(jiān)聽端口
Document Path 請求的url根的絕對路徑
Document Length htp響應(yīng)數(shù)據(jù)的正文長度
Concurrency Level 并發(fā)的用戶數(shù)
Time taken for tests 所有這些請求被處理完成所花費的時間間總和
Complete requests 表示總請求數(shù)
Failed requests 失敗的請求總數(shù)
Total transferred 請求的響應(yīng)數(shù)據(jù)長度總和
Requests per second 服務(wù)器的吐率,每秒處理的請求數(shù)
Iime per request 用戶平均請求等待時間
Iime per request 每個請求實際運行時間的平均值
Percentage of the requests served within a certain time(mp)描述每個請求處理時間的分布情況
① Maxclients參數(shù)與 prefork模式的設(shè)置方式相同,也是2G內(nèi)存設(shè)置為1000
② Minspare Threads設(shè)置為25,即最少有25個線程等待用戶連接。
③ Maxspare Threads設(shè)置為100,請求高峰期后,內(nèi)存中最多有100個線程存在。
④ Threadsperchild設(shè)置為200,即每個子進程可以創(chuàng)建200個子線程工作
⑤ Maxrequestsperchild設(shè)置為1000,即子進程處理1000個請求后銷毀。
6⑥ Startservers設(shè)置為20, Apache啟動時創(chuàng)建20個子進程。
⑦ Serverlimit設(shè)置為40,最多可以創(chuàng)建40個子進程。
⑧ Threadlimit設(shè)置為200,子進程可以創(chuàng)建的最大線程數(shù)。
Prefork:它是系統(tǒng)自動加載的工作模塊不需要配置,啟動方式與worker一樣,其配置格式如下:
Serverlimit
最大進程數(shù)
Start Servers
啟動的時候創(chuàng)建的進程數(shù)量
Minspareservers
最少空閑進程
Maxspareservers
最多空閑進程
Max Clients
最多創(chuàng)建多少個子進程用來處理請求 物理內(nèi)存/2
每個進程處理的最大請求數(shù),如果達到請求數(shù),進程即被銷毀,如
Maxrequestsperchild
果設(shè)置為0,子進程永遠不會結(jié)東