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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

讲php fpm的书,细说PHP-fpm

發(fā)布時(shí)間:2023/12/10 php 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 讲php fpm的书,细说PHP-fpm 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在研究PHP的源碼,有時(shí)候會(huì)延伸到很多東西。這里就專程找了下php-fpm的內(nèi)容學(xué)習(xí)下。

是什么?

在理解php-fpm之前,我們要先搞清楚幾個(gè)關(guān)鍵詞以及他們之間的關(guān)系:CGI

FastCGI

php-fpm

php-cgi.

CGI:(Common Gateway Interface),即通用網(wǎng)關(guān)接口的意思,描述的是服務(wù)器和請(qǐng)求處理程序之間傳輸數(shù)據(jù)的一種標(biāo)準(zhǔn)。 所以,CGI是一種協(xié)議。CGI可用于任何語言,只要該語言具有標(biāo)準(zhǔn)的輸出、輸入以及環(huán)境變量。如perl、php等語言。 以nginx和php為例,我們可以理解為,這是php在與nginx服務(wù)器之間交互時(shí),對(duì)傳輸數(shù)據(jù)的一種約定。

在《HTTP權(quán)威指南》書中,是這么描述的

CGI是一個(gè)標(biāo)準(zhǔn)接口集,Web 服務(wù)器可以用它來裝載程序以響應(yīng)對(duì)特定 URL 的 HTTP 請(qǐng)求,并收集程序的輸出數(shù)據(jù),將其放在 HTTP 響應(yīng)中回送。

那CGI的原理是什么呢

當(dāng)需要請(qǐng)求使用網(wǎng)關(guān)的資源時(shí),服務(wù)器會(huì)請(qǐng)輔助應(yīng)用程序來處理請(qǐng)求(比如nginx會(huì)請(qǐng)php程序來處理請(qǐng)求)。 服務(wù)器會(huì)將輔助應(yīng)用程序的數(shù)據(jù)傳送給網(wǎng)關(guān)。然后網(wǎng)關(guān)會(huì)向服務(wù)器返回一條響應(yīng)或者響應(yīng)數(shù)據(jù),服務(wù)器再將響應(yīng)或響應(yīng)數(shù)據(jù)轉(zhuǎn)發(fā)給客戶端。

由此我們可以清楚兩點(diǎn):

服務(wù)器和網(wǎng)關(guān)是相互獨(dú)立的應(yīng)用程序

服務(wù)器是應(yīng)用程序和網(wǎng)關(guān)之間的一座橋梁

具體原理如圖所示:

image.png

由此,我們可知CGI有一個(gè)致命的弱點(diǎn),即應(yīng)用程序的每次請(qǐng)求,都要引發(fā)一個(gè)全新的進(jìn)程。所以,服務(wù)器和網(wǎng)關(guān)之間的分離會(huì)造成性能的 耗費(fèi),會(huì)限制使用CGI的服務(wù)器的性能,并且會(huì)加重服務(wù)端機(jī)器資源的負(fù)擔(dān)。

好啦,重角要登場(chǎng)了。后來為了解決這個(gè)問題,出現(xiàn)了FastCGI,也就是快速的CGI。 接下來,我們?cè)僭敿?xì)的了解下FastCGI。

FastCGI:(Fast Common Gateway Interface),即快速通用網(wǎng)關(guān)接口,是一種讓交互程序與Web服務(wù)器通信的協(xié)議。它是CGI的增強(qiáng)版本

FastCGI致力于減少網(wǎng)頁服務(wù)器與CGI程序之間互動(dòng)的開銷,從而使服務(wù)器可以同時(shí)處理更多的網(wǎng)頁請(qǐng)求。

以上來自維基百科,我們可以由此了解到,FastCGI,同CGI一樣,也是一種協(xié)議,只不過它是CGI的增強(qiáng)版本。

那FastCGI是如何增強(qiáng)性能的呢?

FastCGI接口模擬了CGI,但FastCGI是作為持久守護(hù)進(jìn)程運(yùn)行的,消除了為每個(gè)請(qǐng)求建立或拆除新進(jìn)程所帶來的性能損耗。也就是允許,一個(gè)進(jìn)程內(nèi)可以處理多個(gè)請(qǐng)求。 也就說CGI解釋器保持在內(nèi)存中,并接受了FastCGI進(jìn)程管理和調(diào)度,所以它可以提供更好的性能,可擴(kuò)展性,故障切換等特點(diǎn)

FastCGI的特點(diǎn)

FastCGI與語言無關(guān)

FastCGI應(yīng)用在進(jìn)程中,獨(dú)立于核心網(wǎng)絡(luò)服務(wù)器,提供了一個(gè)比API環(huán)境更安全的環(huán)境。 APIs的代碼和web服務(wù)器的應(yīng)用的核心是 緊緊關(guān)聯(lián)的。這也就意味著在API應(yīng)用程序的錯(cuò)誤可能會(huì)損壞其它應(yīng)用程序或核心服務(wù)器。惡意API應(yīng)用程序代碼甚至可以竊取另一個(gè)應(yīng)用程序或核心服務(wù)器密鑰。

FastCGI技術(shù)摸錢支持PHP,C/C++, Java language, Perl, Tcl, Python, SmallTalk, Ruby etc.. 它在Apache, ISS, Lighttpd和其他流行的 服務(wù)器中的相關(guān)模塊都是可以使用的。FastCGI不依賴于任何服務(wù)器體系結(jié)構(gòu),所以即使服務(wù)器在技術(shù)上改變了,FastCGI還是穩(wěn)定的

FastCGI的工作原理

Web Server 啟動(dòng)時(shí)載入FastCGI進(jìn)程管理器 (IIS ISAPI 或Apache Module)

FastCGI進(jìn)程管理器首先初始化自己,啟動(dòng)一批CGI解釋器進(jìn)程(可見多個(gè)php-cgi),然后等待來自Web Server的連接。

當(dāng)Web Server中的一個(gè)客戶端請(qǐng)求達(dá)到時(shí), FastCGI進(jìn)程管理器會(huì)選擇并連接一個(gè)CGI解釋器。Web server的CGI環(huán)境變量和標(biāo)準(zhǔn)輸入會(huì)被送達(dá)FastCGI進(jìn)程的php-cgi。

FastCGI子進(jìn)程從同一連接完成返還給Web Server的標(biāo)準(zhǔn)輸出和錯(cuò)誤信息。當(dāng)請(qǐng)求進(jìn)程完成后,FastCGI進(jìn)程會(huì)關(guān)閉此連接。FastCGI會(huì)等待并出來來自FastCGI進(jìn)程管理器(運(yùn)行在Web Server中的)的下一個(gè)連接。 在CGI模式,php-cgi然后會(huì)退出。

FastCGI的不足

因?yàn)槭嵌噙M(jìn)程,所以比CGI多線程消耗更多的服務(wù)器內(nèi)存,PHP-CGI解釋器每進(jìn)程消耗7至25兆內(nèi)存,將這個(gè)數(shù)字乘以50或100就是很大的內(nèi)存數(shù)。 Nginx 0.8.46+PHP 5.2.14(FastCGI)服務(wù)器在3萬并發(fā)連接下,開啟的10個(gè)Nginx進(jìn)程消耗150M內(nèi)存(15M10=150M),開啟的64個(gè)php-cgi進(jìn)程消耗1280M內(nèi)存(20M64=1280M),加上系統(tǒng)自身消耗的內(nèi)存,總共消耗不到2GB內(nèi)存。 如果服務(wù)器內(nèi)存較小,完全可以只開啟25個(gè)php-cgi進(jìn)程,這樣php-cgi消耗的總內(nèi)存數(shù)才500M。

PHP-CGI: PHP-CGI是PHP自帶的FastCGI管理器。

PHP-CGI的不足

php-cgi變更php.ini配置后需重啟php-cgi才能讓新的php-ini生效,不可以平滑重啟

直接殺死php-cgi進(jìn)程,php就不能運(yùn)行了。(PHP-FPM和Spawn-FCGI就沒有這個(gè)問題,守護(hù)進(jìn)程會(huì)平滑從新生成新的子進(jìn)程。)

php-fpm

PHP-FPM是一個(gè)PHP FastCGI管理器,是只用于PHP的,可以在

PHP-FPM其實(shí)是PHP源代碼的一個(gè)補(bǔ)丁,旨在將FastCGI進(jìn)程管理整合進(jìn)PHP包中。必須將它patch到你的PHP源代碼中,在編譯安裝PHP后才可以使用。

現(xiàn)在我們可以在最新的PHP 5.3.2的源碼樹里下載得到直接整合了PHP-FPM的分支,據(jù)說下個(gè)版本會(huì)融合進(jìn)PHP的主分支去。相對(duì)Spawn-FCGI,PHP-FPM在CPU和內(nèi)存方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進(jìn)行監(jiān)控,而PHP-FPM則沒有這種煩惱。 PHP5.3.3已經(jīng)集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP進(jìn)程管理方式,可以有效控制內(nèi)存和進(jìn)程、可以平滑重載PHP配置,比spawn-fcgi具有更多有點(diǎn),所以被PHP官方收錄了。在./configure的時(shí)候帶 –enable-fpm參數(shù)即可開啟PHP-FPM。

總結(jié)

以上是生活随笔為你收集整理的讲php fpm的书,细说PHP-fpm的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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