国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

深入了解SAPI

CoderBear / 3648人閱讀

摘要:將環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到子進(jìn)程子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回。當(dāng)子進(jìn)程關(guān)閉連接時(shí),請求便告知處理完成。定義一個(gè)子進(jìn)程最多處理的請求數(shù),達(dá)到這個(gè)值,進(jìn)程自動(dòng)退出。

一、SAPI比較 1. SAPI

服務(wù)器應(yīng)用程序編程接口,就是服務(wù)器與編程語言之間交互的接口。比如Linux命令行執(zhí)行一段PHP代碼,其實(shí)是Linux shell通過PHP SAPI傳入一組參數(shù),zend引擎執(zhí)行后返回給shell。在PHP生命周期的各個(gè)階段,一些與服務(wù)相關(guān)的操作都是通過SAPI接口實(shí)現(xiàn)。

php_sapi_name()可以查看當(dāng)前SAPI接口的類型。  
如 cli(php -r "echo php_sapi_name();")、fpm-fcgi等
2. PHP運(yùn)行和加載的4個(gè)階段

①M(fèi)init 模塊初始化階段,可以初始化php擴(kuò)展、類庫的內(nèi)部變量、注冊常量,定義模塊使用的類等。

②Rinit 請求初始化階段,在模塊初始化并激活后,會(huì)創(chuàng)建PHP運(yùn)行環(huán)境,初始化本次請求所需的環(huán)境變量,比如 $_SERVER,$_SESSION

③Rshutdown 請求關(guān)閉階段,執(zhí)行最后的清理工作,釋放所有處理本次請求的資源(申請的變量)。請求完成可能是執(zhí)行到腳本完成,也可能是調(diào)用die()或exit()函數(shù)完成

④Mshutdown 模塊回收階段,用于關(guān)閉自己的內(nèi)核子系統(tǒng),釋放沒存。

3. SAPI 5種運(yùn)行模式

①單進(jìn)程模式(CLI,CGI),每次執(zhí)行PHP腳本,都會(huì)執(zhí)行第二部分講的四個(gè)INT和Shutdown事件。當(dāng)用戶請求數(shù)量非常多時(shí),會(huì)大量擠占系統(tǒng)的資源如內(nèi)存,CPU時(shí)間等,造成系統(tǒng)開銷很大

②多進(jìn)程模式(Apache下的prefork MPM模式),會(huì)fork很多子進(jìn)程,每個(gè)子進(jìn)程擁有自己獨(dú)立的進(jìn)程地址空間,在一個(gè)子進(jìn)程中,PHP的生命周期是調(diào)用MINT啟動(dòng)后,執(zhí)行多次請求(RINT/RSHUTDOWN),在Apache關(guān)閉或進(jìn)程結(jié)束后,才會(huì)調(diào)用MSHUTDOWN進(jìn)行回收階段。
多進(jìn)程模型中,每個(gè)子進(jìn)程都是獨(dú)立運(yùn)行,沒有代碼和數(shù)據(jù)共享,因此一個(gè)子進(jìn)程終止退出和重新生成,不會(huì)影響其他子進(jìn)程的穩(wěn)定。

③多線程模式(Apache2的Worker MPM),在一個(gè)進(jìn)程下創(chuàng)建多個(gè)線程,在同一個(gè)進(jìn)程地址空間執(zhí)行

④fastCGI模式,nginx+php-fpm就是這個(gè)模式,fast-cgi是CGI的升級版本,F(xiàn)astCGI可以看成是一個(gè)常駐型的CGI,它可以一直執(zhí)行著,運(yùn)行后可以fork多個(gè)進(jìn)程,不用花費(fèi)時(shí)間動(dòng)態(tài)Fork子進(jìn)程。也不需要每次請求都調(diào)用MINT/MSHUTDOWN。
⑤內(nèi)嵌模式,允許在C/C++語言中調(diào)用PHP提供的函數(shù),運(yùn)行模式和CGI一樣,執(zhí)行4個(gè)階段

二、php-fpm運(yùn)行原理

CGI:是個(gè)協(xié)議,服務(wù)器發(fā)起請求,傳給PHP解析器,傳遞哪些數(shù)據(jù),以什么格式,由CGI決定

fastcgi:是個(gè)協(xié)議,提高CGI性能的,不用每次都去初始化,進(jìn)程不夠用,會(huì)預(yù)先啟動(dòng)幾個(gè)進(jìn)程,進(jìn)程空閑太多了也會(huì)停掉一些,fastCGI對進(jìn)程的管理,提高性能,節(jié)約了資源

php-fpm:實(shí)現(xiàn)fastCGI協(xié)議的程序,被PHP官方收了,也提供了進(jìn)程管理功能,進(jìn)程包含 master 進(jìn)程和 worker 進(jìn)程兩種進(jìn)程。 master 進(jìn)程只有一個(gè),負(fù)責(zé)監(jiān)聽端口分發(fā)請求,接收來自 Web Server 的請求,而 worker 進(jìn)程則一般有多個(gè)(具體數(shù)量根據(jù)實(shí)際需要配置),每個(gè)進(jìn)程內(nèi)部都嵌入了一個(gè) PHP 解釋器,是 PHP 代碼真正執(zhí)行的地方。

php-cgi:cgi解釋器進(jìn)程

FastCGI的工作原理:

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

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

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

FastCGI子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回Web Server。當(dāng)FastCGI子進(jìn)程關(guān)閉連接時(shí),請求便告知處理完成。FastCGI子進(jìn)程接著等待并處理來自FastCGI繼承管理器的下一個(gè)連接

使用FastCGI,系統(tǒng)開銷小。另外,對于數(shù)據(jù)庫和Memcache的持續(xù)連接可以工作。

數(shù)據(jù)庫短連接connect:請求關(guān)閉階段,釋放請求所用的資源,數(shù)據(jù)庫連接句柄也會(huì)被釋放 

數(shù)據(jù)庫長連接pconnect:請求關(guān)閉后,PHP會(huì)收留此次連接,即使主動(dòng)關(guān)閉也不會(huì)關(guān)閉而是收留,下次有打開相同連接的請求時(shí),PHP直接把收留的句柄拿出來,省去建立連接的過程。

php-fpm實(shí)現(xiàn)長連接也需要配合數(shù)據(jù)庫一些配置,一個(gè)進(jìn)程收留一個(gè)連接,數(shù)據(jù)庫連接的數(shù)量就是子進(jìn)程數(shù)量,所以數(shù)據(jù)庫允許連接數(shù)就要大于子進(jìn)程數(shù)。

三、php-fpm進(jìn)程管理的三種模式

php-fpm支持三種運(yùn)行模式,分別為static、ondemand、dynamic,默認(rèn)為dynamic 。

static : 靜態(tài)模式,啟動(dòng)時(shí)分配固定的worker進(jìn)程。只需要考慮max_children的數(shù)量,數(shù)量取決于cpu的個(gè)數(shù)和應(yīng)用的響應(yīng)時(shí)間。

ondemand: 按需分配,啟動(dòng)時(shí)不分配任何進(jìn)程,當(dāng)收到用戶請求時(shí)才啟動(dòng)進(jìn)程。 master進(jìn)程檢查work進(jìn)程的數(shù)量是否受限,是否有空閑的work進(jìn)程,沒有就新建work進(jìn)程。在大流量的系統(tǒng)上master進(jìn)程會(huì)變得繁忙,占用系統(tǒng)cpu資源,不適合大流量環(huán)境的部署。

dynamic: 動(dòng)態(tài)模式,啟動(dòng)時(shí)分配固定的進(jìn)程。伴隨著請求數(shù)增加,在設(shè)定的浮動(dòng)范圍調(diào)整worker進(jìn)程。

 pm = dynamic  //動(dòng)態(tài)進(jìn)程管理,對于專用服務(wù)器,可以設(shè)置為static,靜態(tài)一次性啟動(dòng)最大子進(jìn)程數(shù),不會(huì)變化。
 
 pm.max_children = 50 //最大子進(jìn)程數(shù),ps aux可以查看
 
 pm.start_servers = 20 //啟動(dòng)服務(wù)時(shí)會(huì)啟動(dòng)的進(jìn)程數(shù)
 
 pm.min_spare_servers = 5 //保證空閑子進(jìn)程數(shù)的最小值,如果空閑進(jìn)程小于這個(gè)值,php-fpm服務(wù)會(huì)創(chuàng)建新的子進(jìn)程。
 
 pm.max_spare_servers = 35 //保證空閑子進(jìn)程數(shù)的最大值,如果空閑進(jìn)程高于這個(gè)值,就進(jìn)行清理。
 
 pm.max_requests = 500  //定義一個(gè)子進(jìn)程最多處理的請求數(shù),達(dá)到這個(gè)值,進(jìn)程自動(dòng)退出。目的是為了控制內(nèi)存溢出,使內(nèi)存在一個(gè)可控范圍內(nèi)。但是如果設(shè)置的很小,有可能多個(gè)進(jìn)程同時(shí)達(dá)到這個(gè)值,同時(shí)重啟,就會(huì)導(dǎo)致PHP停止響應(yīng)直到重啟完畢。設(shè)置為0表示一直接受請求。
 
四、php-fpm慢日志

如果一個(gè)php網(wǎng)站可以訪問,就是訪問速度變慢了,可以通過php-fpm的慢執(zhí)行日志,清晰的了解到php的腳本哪里執(zhí)行時(shí)間長,它可以定位到具體的代碼行

 vim /usr/local/php/etc/php-fpm.d/www.conf
 request_slowlog_timeout = 1 //超時(shí)時(shí)間
 slowlog = /usr/local/php/var/log/www-slow.log
 重啟php-fpm /etc/init.d/php-fpm reload

我在php文件中加了一行sleep(3);,運(yùn)行之后返回結(jié)果

參考文獻(xiàn)

1、https://www.jianshu.com/p/c9a... php-fpm進(jìn)程管理的三種模式
2、https://www.jb51.net/article/... SAPI的5種運(yùn)行模式
3、http://blog.51cto.com/1260661... php-fpm慢日志
4、https://www.cnblogs.com/wpjam... php-fpm與mysql長連接

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30052.html

相關(guān)文章

  • PHP回顧之執(zhí)行流程及相關(guān)概念

    摘要:通過,腳本層無需過多考慮執(zhí)行的具體環(huán)境,而本身則可以讓針對自己的特點(diǎn)給出特有實(shí)現(xiàn)。模式下,也只執(zhí)行一次。這幾個(gè)概念的關(guān)系如下網(wǎng)關(guān)協(xié)議,與語言無關(guān),所以與關(guān)系也不大。總結(jié)本文簡要回顧了程序的架構(gòu)和執(zhí)行流程,并對幾個(gè)容易混淆概念做了介紹。 轉(zhuǎn)載請注明文章出處:https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie we...

    jsdt 評論0 收藏0
  • PHP的生命周期

    摘要:的啟動(dòng)和終止請求之前的開始階段模塊初始化階段。的生命周期單進(jìn)程生命周期多進(jìn)程生命周期多線程的生命周期是一種比較特殊的,容許你在語言中調(diào)用提供的函數(shù)。不太了解,明天看一下綜述理一下的生命周期,以及整個(gè)執(zhí)行過程。 PHP的架構(gòu)圖 showImg(https://segmentfault.com/img/remote/1460000013321599?w=514&h=525); SAPI S...

    sf190404 評論0 收藏0
  • 【PHP7源碼分析】PHP中$_POST揭秘

    摘要:和進(jìn)程的啟動(dòng)過程類似,啟動(dòng)過程有種進(jìn)程角色啟動(dòng)進(jìn)程進(jìn)程和進(jìn)程。直到請求到來,將連接賦值給對象的字段。注當(dāng)進(jìn)程執(zhí)行完后會(huì)再次調(diào)用函數(shù),準(zhǔn)備監(jiān)聽新的請求。當(dāng)讀取到的時(shí),會(huì)調(diào)用函數(shù)對進(jìn)行解析,將中的以及存儲(chǔ)到結(jié)構(gòu)體中。 運(yùn)營研發(fā)團(tuán)隊(duì) 季偉濱 一、前言 前幾天的工作中,需要通過curl做一次接口測試。讓我意外的是,通過$_POST竟然無法獲取到Content-Type是application...

    sf190404 評論0 收藏0
  • PHP源碼研究

    摘要:最近閑來無事,所以對這門語言進(jìn)行更深一層的了解,對源碼進(jìn)行一番研究,是如何執(zhí)行我們寫的腳本的。引擎是語言實(shí)現(xiàn)的最為重要的部分,是最基礎(chǔ)最核心的部分,它的源碼在目錄下,代碼從編譯到執(zhí)行都是由完成的,后面章節(jié)絕大部分的源碼分析都是針對的。 最近閑來無事,所以對PHP這門語言進(jìn)行更深一層的了解,對源碼進(jìn)行一番研究,是如何執(zhí)行我們寫的PHP腳本的。 1.1.3 PHP的相關(guān)組成 1.1.3.1...

    Developer 評論0 收藏0
  • SAPI 基于Spring極度簡單的Restful API工具

    摘要:是一個(gè)及其精簡的輸出工具,誕生的背景是基于目前微服務(wù)開發(fā)接口,很多中小型項(xiàng)目開發(fā)人員在對接口測試時(shí)不僅需要使用等進(jìn)行業(yè)務(wù)接口測試,還需要對進(jìn)行自測。目前只需要開發(fā)人員引入后再啟動(dòng)類加入一行文件即可。中的路徑不要忽略。 SAPI是一個(gè)及其精簡的Restful API輸出工具,誕生的背景是基于目前微服務(wù)開發(fā)接口,很多中小型項(xiàng)目開發(fā)人員在對接口測試時(shí)不僅需要使用JUnit等進(jìn)行業(yè)務(wù)接口測試,...

    Keven 評論0 收藏0

發(fā)表評論

0條評論

CoderBear

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<