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