日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apache的工作模式

發(fā)布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache的工作模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

apache的工作模式

什么是apache的工作模式?

個人理解:apache的工作模式就是apache在運行時候的內存分配,進程和線程的使用方式。舉個例子:一臺apache正在運行的服務器,如果有個用戶訪問這個apache,那么apache是啟用一個進程來處理用戶的請求呢?還是在已有的進程中啟用一個線程來處理該用戶的請求?這個選擇就是 apache的工作模式來確定的。如果指定了某個工作模式比如prefork模式,那么每個用戶的請求就要啟用一個進程來處理。

apache有幾種工作模式?怎么查看和修改apache的工作模式?

apache的工作模式有:beos,event,worker,prefork,mpmt_os2。

在linux(centos)下使用#http –l 命令可以查看當前使用的工作模式。也可以使用#apachectl -l命令。

#http –l

?

#apachectl –l

?

看到的prefork.c,說明使用的prefork工作模式。

可以在編譯的時候使用#–with-mpm=prefork對應的工作模式名稱來修改工作模式。

beos工作模式(跟linux關系不大,或者暫時用不上)

在Beos系統(tǒng)上的工作模式,使用一個單獨的控制線程來創(chuàng)建和控制處理請求的工作線程。

event工作模式(不太穩(wěn)定,或者說暫時用不上)

event模式由于把服務進程從鏈接中分離出來,在開啟KeepAlive場合下相對worker模式能夠承受的了更高的負載。event模式為 worker開發(fā)的變種模式,配置以及指令與worker完全相同。不過event模式不能很好的支持https的訪問,有時還會出現(xiàn)一系列的問題。

worker工作模式(與php配合不好,或者說暫時用不上)

worker模式由于使用線程來進行處理請求,所以能夠處理海量請求,而系統(tǒng)資源的開銷要小于基于進程的服務器。同時worker模式也使用了多進程,每個進程又有著多個線程,以獲得基于進程服務器的穩(wěn)定性。

mpmt_os2工作模式(很少用,或者說暫時用不上)

mpmt_os2是專門針對OS/2優(yōu)化過的混合多進程多線程多路處理模塊(MPM) 。

prefork工作模式(本篇文章的主角,使用最多而且最穩(wěn)定的工作模式)

prefork工作模式是linux下apache安裝時候的默認工作模式,是使用最普遍的工作模式。為了能夠簡單的明白他的工作原理,下面是一個假設:

有一臺正在運行的apache服務器,用戶A訪問該apache的時候apache建立一個新的進程1處理用戶A的請求。

這時又有一個用戶B訪問該apache,apache又建立一個新的進程2處理用戶B的請求。

后來又有用戶C,D,E訪問該apache,apache又建立三個進程3,4,5處理他們的請求。

如果每當一個新用戶訪問該apache,apache再建立一個新的進程處理用戶的請求,是不是太慢了呢?

所以apache的prefork模式在apache第一次啟動的時候就建立5個進程,等待用戶的連接請求,有一個用戶訪問,就有一個進程處理他的請求。

那么如果有5個用戶同時訪問apache,apache第一次建立的5個進程全部用光了,所以apache就再從新在建立5個進程,等待下一批用戶的請求。

prefork模式會根據(jù)服務器的硬件情況,設定apache最多只能同時建立256個進程。再多的請求就只能等待前面的進程處理完畢在進行處理。

假設完畢!

上面的假設就是prefork模式的工作原理。但是上面假設中具體的數(shù)字不是定死的,而是通過prefork模式的配置來設置的。下面是http.conf中的配置信息。

?

*帶井號的為注釋部分

prefork模式的幾個重要的參數(shù):

名稱?

默認值?

說明

StartServers?

5?

apache啟動時候默認開始的進程數(shù)

MinSpareServers?

5?

最小的閑置進程數(shù)

MaxSpareServers?

10?

最大的閑置進程數(shù)

ServerLimit?

256?

最大的進程總數(shù)(參考,實際看MaxClients)

MaxClients?

256?

最大的進程總數(shù)

MaxRequestsPerChild?

4000?

每個進程處理的最多請求數(shù)

StartServers:這個看了就明白了。

MinSpareServers:舉個例子就明白了。

apache在沒有用戶訪問時候有5個閑置的進程,如果有一個用戶訪問網(wǎng)站。則閑置的進程就只有4個,這個值小于MinSpareServers,所以apache就以第一秒1個進程,第二秒2個進程,第三秒4個進程的速度新建空閑進程。直到大于等于MinSpareServers個空閑進程才結束。

MaxSpareServers:還是舉個例子就明白了。

apache在沒有用戶訪問時候有5個閑置的進程,如果有5個用戶同時訪問網(wǎng)站。則閑置的進程就只有0個,這個值小于 MinSpareServers,所以apache就以第一秒1個進程,第二秒2個進程,第三秒4個進程的速度新建空閑進程。直到大于等于 MinSpareServers個空閑進程才結束。在這個例子中直到第三秒,一共生成1+2+4個進程才能滿足大于等于MinSpareServers的要求。后來這5個用戶訪問完apache,訪問結束,關閉瀏覽器。所以apache就有了5+7個空閑的進程。這時空閑的進程比較多,apache就開始關閉一些進程,直到滿足小于MaxSpareServers個空閑進程才結束。如果該值小于MinSpareServers則apache默認將該值設置成MinSpareServers+1。

ServerLimit:這個參數(shù)是控制apache的進程總數(shù)的,那為什么會有兩個參數(shù)控制apache的進程總數(shù)呢?這個參數(shù)在apache1的時代是沒有的,因為那個時候有個256M內存的服務器就很厲害了。后來apache2的時代到來,服務器的硬件也得到升級。很多服務器都是4G內存,還有很多比4G內存大的服務器出現(xiàn)。apache1的時代只有一個MaxClients參數(shù)控制進程總數(shù)就夠了,而這個參數(shù)最大值是256定死了。但是到了apache2的時代必須調整ServerLimit值大于256才能使MaxClient支持大于256的值。

MaxClients:apache最大的進程數(shù)。apache1的時代只有一個MaxClients參數(shù)控制進程總數(shù)就夠了,而這個參數(shù)最大值是256定死了。但是到了apache2的時代必須調整ServerLimit值大于256才能使MaxClient支持大于256的值。

MaxRequestsPerChild:舉個例子就明白了。

apache在沒有用戶訪問的時候有5個空閑進程。當一個用戶訪問網(wǎng)站,訪問完又離開。則apache的第一個進程就處理了一個請求,從新進入閑置狀態(tài)。再有一個用戶訪問網(wǎng)站,訪問完后離開。則apache的第一個進程就處理了1+1個請求。這樣繼續(xù)訪問3998個用戶,這個進程就處理了4000個請求,之后就自動關閉這個進程。這個時候apache就只有4個限制的進程,小于MinSpareServers值所以apache從今建立一個空閑進程。至于為什么處理完4000個請求就要關閉這個進程呢?答案之一:為了防止內存的泄露。

下面圖文介紹這些參數(shù)(要深刻理解一個知識就要親自去體驗)

測試環(huán)境參數(shù)?

說明

操作系統(tǒng)?

centos4.5(虛擬機)

服務器?

apache2.2.6

內存?

1G

服務器地址?

192.168.212.128

客戶端地址?

192.168.212.1

測試文件index.php

<?php

for($i = 0;$i <= 10;$i++){

? ? ? ? ? ? ? ?echo date('H:i:s',time());

? ? ? ? ? ? ? ?echo '<br/>';

? ? ? ? ? ? ? ?sleep(10);

}

?>

測試http.conf的prefork模式設置:(設置有點極端,但是可以很好的理解說明)

?

首先查看apache第一次啟動時候的空閑進程:

linux(centos)下查看apache的進程可以使用#ps -ef|grep httpd命令,查看apache進程的內存使用情況可以使用#ps &ndash;U apache &ndash;u apache u命令

#service httpd restrat:重啟apache,初始化進程

#ps -ef|grep httpd:用戶名為apache的才是apache用于處理用戶請求的進程

#ps &ndash;U apache &ndash;u apache u:查看用戶名為apache的進程(即apache為了處理用戶請求而建立的進程詳情)

?

當前為沒有任何用戶訪問時候apache建立StartServers=1個進程

當有一個用戶訪問(通過本機上的ie瀏覽器訪問虛擬主機上apache服務器模式該情景)

?

可以看到apache的進程增加為2個,為什么呢?當唯一的空閑進程時候完之后,空閑進程小于MinSpareServers,apache就從新建立一個進程。注意查看RSS值(該進程的內存使用量KB)為4424的空閑進程。

再看看訪問完成之后的apache進程數(shù)。

?

可以看到還是只有兩個進程,而且這兩個進程都是空閑的。

當有兩個用戶訪問(通過本機上的兩個ie瀏覽訪問虛擬主機上的apache服務器模擬該情景)

?

可以看到有兩個用戶訪問的時候apache的進程數(shù)增加為3個。為什么呢?當本來空閑2個進程時候完之后,空閑進程小于MinSpareServers,apache就從新建立一個進程。注意查看RSS值(該進程的內存使用量KB)為4424的空閑進程。

再看看訪問完成之后的apache進程數(shù)。

?

可以看到空閑的進程數(shù)又減少為2個。為什么呢?當兩個用戶訪問完成之后兩個用戶的進程都會關閉,這時候就會有3個空閑進程,這個值大于MaxSpareServers=2的值。所以apache會自動關掉一個進程滿足MaxSpareServers=2的值。

當有三個用戶同時訪問(通過本機上的三個ie瀏覽訪問虛擬主機上的apache服務器模擬該情景)

?

可以看到apache的進程有3個,而這三個進程都在處理用戶的請求,沒有多余的空閑進程產(chǎn)生。為什么呢?因為在上面我們設置了MaxClients的值為3。所以apache最多只會生成3個進程。

再看看這三個用戶訪問完成之后的apache進程數(shù)。

?

可以看到空閑的進程數(shù)又減少為2個。為什么呢?當三個用戶訪問完成之后三個用戶的進程都會關閉,這時候就會有3個空閑進程,這個值大于MaxSpareServers=2的值。所以apache會自動關掉一個進程滿足MaxSpareServers=2的值。

當有四個用戶同時訪問(通過本機上的四個ie瀏覽訪問虛擬主機上的apache服務器模擬該情景)

?

可以看到雖然有四個用戶同時訪問,但是apache創(chuàng)建的進程數(shù)還是只有3個。就是說apache只對前面的3個用戶請求進行了處理。第4個用戶只能等待。

這個時候查看apache的TCP連接情況。(對于TCP連接不太理解的可以點擊查看)

?

可以看到這4個用戶都已經(jīng)建立了連接。但是apache只處理了前面的3個請求。處理完3個請求在處理最后一個請求,這點可能從文件的打印內容看到。四個用戶幾乎是同時訪問的。

?

可以看到最后一個用戶的請求時間是前面三個用戶訪問完成之后開始的。

依次類推,當有7個用戶同時訪問時候又是什么樣的?只貼幾張圖,看了就明白了。

結論

如果從頭到尾詳細讀過本篇文章,會得出如下的結論:

1,apache是嚴格按照prefork模式的配置參數(shù)來進程分配和管理的。不像網(wǎng)上有些文章那樣修改了某個值,apache不起作用。只能說您改的不對,或者說您對上面的內容還不夠理解。

2,MaxClients值就是apache的最大進程數(shù)。不像網(wǎng)上有些文章說的這個值越大越好(有的文章既然推薦該值為4000),您可以從上面的進程圖中看到apache的每個進程的%MEM(內存占用百分比)值為0.5%左右。所以這個值的具體設置的最大數(shù)位:100/0.5 = 200。而這也只是在這個服務器只有一個apache的情況下。如果服務器有其他程序需要占用內存(比如mysql)這個值要小于200。你總不能把操作系統(tǒng)的所有內存都給apache吧?

3,每個瀏覽器是一個用戶,每個用戶就是一條進程。明白意思了吧?我的這臺服務器的并發(fā)量只有200。就是說我的這臺服務器只能支持同時200個用戶訪問,再多的用戶訪問就只能是等待。或者說我這臺服務器只支持200個瀏覽器的訪問。關于服務器的并發(fā)我會在下面一片文章中詳細講解。

4,200的并發(fā)量很小嗎?要知道apache處理數(shù)據(jù)的速度是相當快的。一條正常的首頁訪問可能就一秒鐘處理完畢。所以在假想的狀態(tài)下,我的這臺服務器,每分鐘可以訪問60*200=12000個用戶。每天可以訪問12000*60*24=17280000個用戶的訪問。這當然是在完全飽和的訪問狀態(tài)的假想數(shù)據(jù)。下一篇文章我會詳細講解網(wǎng)站并發(fā),請求,連擊等內容。

5,如果訪問的用戶數(shù)大于MaxClients的數(shù),多出的用戶不會立刻斷掉連接,還是會建立TCP連接。只不過會等待前面的用戶處理完在得到相應。在php.ini,http.conf,操作系統(tǒng)設定的超時時間內得不到相應才會斷掉連接。

補充

本篇文章是本人對apache的工作模式,連接請求,并發(fā)等內容后總結的個人觀點。難免會有些錯誤。

原文地址:http://www.cnblogs.com/mengqh/archive/2012/02/07/2341575.html

轉載于:https://blog.51cto.com/leeforget/1176384

總結

以上是生活随笔為你收集整理的apache的工作模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 啪啪网站大全 | 黄色大片黄色大片 | 伊人久久伊人 | a级片在线视频 | 蜜乳av懂色av粉嫩av | 陪读偷伦初尝小说 | 新香蕉视频| 国产精品久久久久久久久毛片 | 日韩精品av一区二区三区 | 亚洲欧美中文日韩在线 | 伊人色av | 日韩欧美国产一区二区三区 | 日韩av成人在线 | 俺去日 | 色欲狠狠躁天天躁无码中文字幕 | 色夜av | 手机在线免费视频 | 国产一区久久 | 国产做a| 毛片免费一区二区三区 | 日本丰满bbwbbw厨房 | 97久久久久久久 | 小草av| 国产一区二区a | 亚洲欧美www | 东京热加勒比无码少妇 | www.波多野结衣.com | 中国在线观看免费视频 | 一起草国产 | 久久6| 久久久久久久久综合 | 兔费看少妇性l交大片免费 日韩高清不卡 | jizzjizz欧美69巨大 | 久久婷婷综合色丁香五月 | 天天干干 | 国产精品无码999 | 亚洲国产日韩在线一区 | 日韩欧美成人免费视频 | 国产欧美视频一区 | 女生喷水视频 | 香蕉在线观看视频 | 四虎影库永久在线 | 伊人超碰在线 | 午夜视频福利在线观看 | 综合久久综合久久 | 久久午夜影院 | 欧美精品videos极品 | 欧美比基尼 | 51国产视频 | 不卡一二区 | 无码人妻精品一区二区三区99不卡 | 初尝黑人巨炮波多野结衣 | 人与性动交zzzzbbbb | 国产在线精品一区二区三区 | 午夜青青草 | www欧美| 中文字幕在线观看第一页 | 久久免费看少妇高潮 | 少妇精品 | 天天躁夜夜躁狠狠是什么心态 | 色中色综合网 | 成人蜜桃视频 | 午夜网址 | 四虎影院永久 | 亚洲黄业 | 久久亚洲综合网 | 男人天堂伊人 | 日本在线播放视频 | 亚洲深夜福利 | 尤物国产 | 日韩欧美电影一区二区三区 | 免费观看黄色的网站 | 午夜操操 | 国产精品免费观看视频 | 久久久九九九九 | 午夜精品免费 | 国产真实乱人偷精品人妻 | 我会温柔一点的日剧 | 日本成人在线一区 | 午夜精品一区二区三区三上悠亚 | 亚洲吧| 亚洲成人免费在线 | 久草资源在线视频 | 黄色xxxxxx| 福利所第一导航 | 国产成人精品免费 | 小辣椒福利视频导航 | 激情视频网址 | 香蕉福利视频 | 无遮挡又爽又刺激的视频 | 99精彩视频 | 欧美午夜一区 | 亚洲性一区 | 蜜桃视频一区二区 | 中文字幕人妻丝袜二区 | 天天爱天天射 | 免费av观看| 精品久久一区二区三区 | 中文字幕在线视频网站 |