亚洲综合极品香蕉久久网,久久夜精品综合缴情五月 ,亚洲动漫成人一区二区,国产在线不卡视频,国产丝袜精品不卡,亚洲乱码日产精品bd,久久久久久国产精品免费网站,亚洲综合av一区二区三区
×

Nginx、Apache的工作原理以及Nginx為何比Apache高效

  • 作者:新網(wǎng)
  • 來源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-02 09:20:55

眾所周知Nginx在處理大并發(fā)靜態(tài)請求方面,效率明顯高于httpd,甚至能輕松解決C10K問題。在高并發(fā)連接的情況下,Nginx是Apache服務器不錯的替代品。Nginx同時也可以作為7層負載均衡服務器來使用。根據(jù)我的測試結果,Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 可以承受3萬以上的并發(fā)連接數(shù),相當于同等環(huán)境下Apache的10倍。 一般來說,4GB內存的服務器+Apache(prefork模式)一般只能處理3000個并發(fā)連接,因為它們將占用3GB以上的內存,還得為系統(tǒng)

 眾所周知Nginx在處理大并發(fā)靜態(tài)請求方面,效率明顯高于httpd,甚至能輕松解決C10K問題。在高并發(fā)連接的情況下,Nginx是Apache服務器不錯的替代品。Nginx同時也可以作為7層負載均衡服務器來使用。根據(jù)我的測試結果,Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 可以承受3萬以上的并發(fā)連接數(shù),相當于同等環(huán)境下Apache的10倍。

 
timg.jpg
一般來說,4GB內存的服務器+Apache(prefork模式)一般只能處理3000個并發(fā)連接,因為它們將占用3GB以上的內存,還得為系統(tǒng)預留1GB的內存。我曾經(jīng)就有兩臺Apache服務器,因為在配置文件中設置的MaxClients為4000,當Apache并發(fā)連接數(shù)達到3800時,導致服務器內存和Swap空間用滿而崩潰。
 
而這臺 Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 服務器在3萬并發(fā)連接下,開啟的10個Nginx進程消耗150M內存(15M*10=150M),開啟的64個php-cgi進程消耗1280M內存(20M*64=1280M),加上系統(tǒng)自身消耗的內存,總共消耗不到2GB內存。如果服務器內存較小,完全可以只開啟25個php-cgi進程,這樣php-cgi消耗的總內存數(shù)才500M。
 
在3萬并發(fā)連接下,訪問Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 服務器的PHP程序,仍然速度飛快。為什么Nginx在處理高并發(fā)方面要優(yōu)于httpd,我們先從兩種web服務器的工作原理以及工作模式說起。
 
apache三種工作模式
 
我們都知道Apache有三種工作模塊,分別為prefork、worker、event。
 
prefork:多進程,每個請求用一個進程響應,這個過程會用到select機制來通知。
 
worker:多線程,一個進程可以生成多個線程,每個線程響應一個請求,但通知機制還是select不過可以接受更多的請求。
 
event:基于異步I/O模型,一個進程或線程,每個進程或線程響應多個用戶請求,它是基于事件驅動(也就是epoll機制)實現(xiàn)的。
 
4.2 prefork的工作原理
 
如果不用“--with-mpm”顯式指定某種MPM,prefork就是Unix平臺上缺省的MPM.它所采用的預派生子進程方式也是 Apache1.3中采用的模式。prefork本身并沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;另一方面,prefork用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成為最穩(wěn)定的MPM之一。
 
4.3 worker的工作原理
 
相對于prefork,worker是2.0版中全新的支持多線程和多進程混合模型的MPM。由于使用線程來處理,所以可以處理相對海量的請求,而系統(tǒng)資源的開銷要小于基于進程的服務器。但是,worker也使用了多進程,每個進程又生成多個線程,以獲得基于進程服務器的穩(wěn)定性,這種MPM的工作方 式將是Apache2.0的發(fā)展趨勢。
 
4.4 event 基于事件機制的特性
 
一個進程響應多個用戶請求,利用callback機制,讓套接字復用,請求過來后進程并不處理請求,而是直接交由其他機制來處理,通過epoll機制來通知請求是否完成;在這個過程中,進程本身一直處于空閑狀態(tài),可以一直接收用戶請求。可以實現(xiàn)一個進程程響應多個用戶請求。支持持海量并發(fā)連接數(shù),消耗更少的資源。
 
如何提高Web服務器的并發(fā)連接處理能力
 
有幾個基本條件:
 
1.基于線程,即一個進程生成多個線程,每個線程響應用戶的每個請求。
 
2.基于事件的模型,一個進程處理多個請求,并且通過epoll機制來通知用戶請求完成。
 
3.基于磁盤的AIO(異步I/O)
 
4.支持mmap內存映射,mmap傳統(tǒng)的web服務器,進行頁面輸入時,都是將磁盤的頁面先輸入到內核緩存中,再由內核緩存中復制一份到web服務器上,mmap機制就是讓內核緩存與磁盤進行映射,web服務器,直接復制頁面內容即可。不需要先把磁盤的上的頁面先輸入到內核緩存去。
 
剛好,Nginx 支持以上所有特性。所以Nginx官網(wǎng)上說,Nginx支持50000并發(fā),是有依據(jù)的。
 
Nginx優(yōu)異之處
 
傳統(tǒng)上基于進程或線程模型架構的web服務通過每進程或每線程處理并發(fā)連接請求,這勢必會在網(wǎng)絡和I/O操作時產生阻塞,其另一個必然結果則是對內存或CPU的利用率低下。生成一個新的進程/線程需要事先備好其運行時環(huán)境,這包括為其分配堆內存和棧內存,以及為其創(chuàng)建新的執(zhí)行上下文等。這些操作都需要占用CPU,而且過多的進程/線程還會帶來線程抖動或頻繁的上下文切換,系統(tǒng)性能也會由此進一步下降。另一種高性能web服務器/web服務器反向代理:Nginx(Engine X),nginx的主要著眼點就是其高性能以及對物理計算資源的高密度利用,因此其采用了不同的架構模型。受啟發(fā)于多種操作系統(tǒng)設計中基于“事件”的高級處理機制,nginx采用了模塊化、事件驅動、異步、單線程及非阻塞的架構,并大量采用了多路復用及事件通知機制。在nginx中,連接請求由為數(shù)不多的幾個僅包含一個線程的進程worker以高效的回環(huán)(run-loop)機制進行處理,而每個worker可以并行處理數(shù)千個的并發(fā)連接及請求。
 
Nginx 工作原理
 
Nginx會按需同時運行多個進程:一個主進程(master)和幾個工作進程(worker),配置了緩存時還會有緩存加載器進程(cache loader)和緩存管理器進程(cache manager)等。所有進程均是僅含有一個線程,并主要通過“共享內存”的機制實現(xiàn)進程間通信。主進程以root用戶身份運行,而worker、cache loader和cache manager均應以非特權用戶身份運行。
 
在高連接并發(fā)的情況下,Nginx是Apache服務器不錯的替代品
 
Nginx 安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法),Bugs 非常少的服務器: Nginx 啟動特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數(shù)個月也不需要重新啟動. 你還能夠 不間斷服務的情況下進行軟件版本的升級 。
 
Nginx 的誕生主要解決C10K問題
 
最后我們從各自使用的多路復用IO模型來分析:
 
select模型:(apache使用,由于受模塊等限制,用的不多)
 
單個進程能夠 監(jiān)視的文件描述符的數(shù)量存在最大限制
 
select()所維護的 存儲大量文件描述符的數(shù)據(jù)結構 ,隨著文件描述符數(shù)量的增長,其在用戶態(tài)和內核的地址空間的復制所引發(fā)的開銷也會線性增長
 
由于網(wǎng)絡響應時間的延遲使得大量TCP連接處于非活躍狀態(tài),但調用select()還是會對 所有的socket進行一次線性掃描 ,會造成一定的開銷
 
poll:poll是unix沿用select自己重新實現(xiàn)了一遍,唯一解決的問題是poll 沒有最大文件描述符數(shù)量的限制
 
epoll模型:(nginx使用)
 
epoll帶來了兩個優(yōu)勢,大幅度提升了性能:
 
基于事件的就緒通知方式 ,select/poll方式,進程只有在調用一定的方法后,內核才會對所有監(jiān)視的文件描述符進行掃描,而epoll事件通過epoll_ctl()注冊一個文件描述符,一旦某個文件描述符就緒時,內核會采用類似call back的回調機制,迅速激活這個文件描述符,epoll_wait()便會得到通知
 
調用一次epoll_wait()獲得就緒文件描述符時,返回的并不是實際的描述符,而是一個代表就緒描述符數(shù)量的值,拿到這些值去epoll指定的一個數(shù)組中依次取得相應數(shù)量的文件描述符即可,這里使用內存映射(mmap)技術, 避免了復制大量文件描述符帶來的開銷
 
當然epoll也有一定的局限性, epoll只有Linux2.6才有實現(xiàn) ,而其他平臺都沒有,這和apache這種優(yōu)秀的跨平臺服務器,顯然是有些背道而馳了。
 
簡單來說epoll是select的升級版,單進程管理的文件描述符沒有最大限制。但epoll只有linux平臺可使用。作為跨平臺的Apache沒有使用。
 
以上就是我們的今日分享,希望對您有所幫助。
 

免責聲明:本文內容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權,也不承認相關法律責任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內容,請發(fā)送郵件至:operations@xinnet.com進行舉報,并提供相關證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權內容。

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 日韩人妻无码精品免费shipin| 18禁止进入1000部高潮网站| 香蕉在线 亚洲 欧美 专区| 高清熟女国产一区二区三区| 日韩一区二区三区高清电影| 亚洲αv在线精品糸列| 亚洲香蕉网久久综合影视| 成年无码av片| 午夜激成人免费视频在线观看 | 最新国自产拍av| 国产日产欧产精品精乱子| 国产午夜人做人免费视频网站| 在线精品亚洲观看不卡欧| 精品剧情v国产在线观看| 国产现实无码av| 久久大香萑太香蕉av| 国产稚嫩高中生呻吟激情在线视频| 亚洲中文波霸中文字幕| 亚洲精品国产综合99久久一区 | 亚洲αv久久久噜噜噜噜噜| 亚洲精品久久久久午夜福利| 午夜福利av无码一区二区| 国产美女亚洲精品久久久久| 亚洲国产成人久久综合电影| 秋霞鲁丝片一区二区三区| 一区二区三区乱码在线 | 中文| 亚洲香蕉免费有线视频| 国产成人午夜无码电影在线观看| 日韩在线不卡免费视频一区| 亚洲国产初高中生女av| 久久精品伊人一区二区三区| 强被迫伦姧高潮无码bd电影| 亚洲精品久久久久久不卡精品小说| 伊人伊成久久人综合网996| 久久精品2021国产| 国产熟女一区二区三区四区五区 | 国内精品自在拍精选| 又大又粗又长的高潮视频| 日本高清二区视频久二区| 天天摸天天摸色综合舒服网| 色偷偷色噜噜狠狠网站30根|