久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

基于PHP-FPM進程池的探索

基于PHP-FPM進程池的探索

PHP 支持多進程而不支持多線程;PHP-FPM 在進程池中運行多個子進程并發(fā)處理所有連接請求。通過 ps 查看PHP-FPM進程池(pm.start_servers = 2)狀態(tài)如下:

root@d856fd02d2fe:~# ps aux -L USER  PID LWP %CPU NLWP %MEM VSZ RSS TTY  STAT START TIME COMMAND root   1  1 0.0 1 0.0 4504 692 ?  Ss 13:10 0:00 /bin/sh /usr/local/php/bin/php-fpm start root   7  7 0.0 1 0.4 176076 19304 ?  Ss 13:10 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) www-data  8  8 0.0 1 0.2 176076 8132 ?  S 13:10 0:00 php-fpm: pool www www-data  9  9 0.0 1 0.2 176076 8132 ?  S 13:10 0:00 php-fpm: pool www root  10 10 0.0 1 0.0 18376 3476 ?  Ss 14:11 0:00 bash root  66 66 0.0 1 0.0 34420 2920 ?  R+ 15:13 0:00 ps aux -L

從列表中可以看出,進程池www中有兩個尚處于空閑狀態(tài)的子進程PID 8和 PID 9。注:NLWP指輕量級進程數(shù)量,即線程數(shù)量。

PHP-FPM(FastCGI Process Manager)是什么?PHP-FPM為PHP-CGI提供進程管理方式,可以有效控制內(nèi)存和進程,可以平滑重載PHP配置,其master process是常駐內(nèi)存的。FastCGI是語言無關的、可伸縮架構(gòu)的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內(nèi)存中更長時間,不是fork-and-execute,并因此獲得較高的性能。FastCGI支持分布式部署,可以部署在WEB服務器以外的多個主機上。

探秘手段:模擬多線程并發(fā)執(zhí)行

相關學習推薦:PHP編程從入門到精通

1. 什么是線程:線程有時又稱輕量級進程(Lightweight Process,LWP),通常由線程ID、當前指令指針(PC)、寄存器集合和堆棧組成,是進程中的一個實體,是被系統(tǒng)獨立調(diào)度的基本單位;線程自己不擁有系統(tǒng)資源,只擁有一點兒在運行中必不可少的資源,與同屬一個進程的其它線程共享進程所擁有的全部資源。 由于線程之間的相互制約,致使線程在運行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運行三種基本狀態(tài)。由于進程是資源擁有者,創(chuàng)建、撤消與切換開銷過大,在對稱多處理機(SMP)上同時運行多個線程(Threads)才是更合適的選擇。線程的實體包括程序、數(shù)據(jù)和線程控制塊(Thread Control Block,TCB),TCB包括以下信息:

(1)線程狀態(tài);

(2)當線程不運行時,被保存的現(xiàn)場資源;

(3)一組執(zhí)行堆棧;

(4)存放每個線程的局部變量主存;

(5)訪問同一個進程中的主存和其它資源。

但使用多個進程會使得應用程序在出現(xiàn)進程池內(nèi)的進程崩潰或被攻擊的情況下變得更加健壯。

2. 模擬多線程:

<?php /**  * PHP 只支持多進程不支持多線程。  *  * PHP-FPM 在進程池中運行多個子進程并發(fā)處理所有連接,  * 同一個子進程可先后處理多個連接請求,但同一時間  * 只能處理一個連接請求,未處理連接請求將進入隊列等待處理  *  */  class SimulatedThread {  //模擬線程  private $thread;   //主機名  private $host = 'tcp://172.17.0.5';   //端口號  private $port = 80;   public function __construct()  {   //采用當前時間給線程編號   $this->thread = microtime(true);  }   /**   * 通過socket發(fā)送一個新的HTTP連接請求到本機,   * 此時當前模擬線程既是服務端又是模擬客戶端   *   * 當前(程序)子進程sleep(1)后會延遲1s才繼續(xù)執(zhí)行,但其持有的連接是繼續(xù)有效的,   * 不能處理新的連接請求,故這種做法會降低進程池處理并發(fā)連接請求的能力,   * 類似延遲處理還有time_nanosleep()、time_sleep_until()、usleep()。   * 而且sleep(1)這種做法并不安全,nginx依然可能出現(xiàn)如下錯誤:   * “epoll_wait() reported that client prematurely closed connection,   * so upstream connection is closed too while connecting to upstream”   *   * @return void   */  public function simulate()  {   $run = $_GET['run'] ?? 0;   if ($run++ < 9) {//最多模擬10個線程    $fp = fsockopen($this->host, $this->port);    fputs($fp, "GET {$_SERVER['PHP_SELF']}?run={$run}rnrn");    sleep(1);//usleep(500)    fclose($fp);   }    $this->log();  }   /**   * 日志記錄當前模擬線程運行時間   *   * @return void   */  private function log()  {   $fp = fopen('simulated.thread', 'a');   fputs($fp, "Log thread {$this->thread} at " . microtime(true) . "(s)rn");    fclose($fp);  } }  $thread = new SimulatedThread(); $thread->simulate(); echo "Started to simulate threads...";

探秘匯總:本人通過運行上述腳本后,發(fā)現(xiàn)一些可預料但卻不是我曾想到的結(jié)果

1. PHP-FPM配置項pm.max_children = 5,simulated.thread記錄如下:

Log thread 1508054181.4236 at 1508054182.4244(s) Log thread 1508054181.4248 at 1508054182.4254(s) Log thread 1508054181.426 at 1508054182.428(s) Log thread 1508054181.6095 at 1508054182.6104(s) Log thread 1508054182.4254 at 1508054183.4262(s) Log thread 1508054183.4272 at 1508054183.4272(s) Log thread 1508054182.4269 at 1508054183.4275(s) Log thread 1508054182.4289 at 1508054183.43(s) Log thread 1508054182.6085 at 1508054183.6091(s) Log thread 1508054182.611 at 1508054183.6118(s)

最新生成的(模擬)線程登記出現(xiàn)在紅色標示條目位置是因為進程池的并發(fā)連接處理能力上限為5,因此它只可能出現(xiàn)在第六條以后的位置。

Log thread 1508058075.042 at 1508058076.0428(s) Log thread 1508058075.0432 at 1508058076.0439(s) Log thread 1508058075.0443 at 1508058076.045(s) Log thread 1508058075.6623 at 1508058076.6634(s) Log thread 1508058076.0447 at 1508058077.0455(s) Log thread 1508058076.046 at 1508058077.0466(s) Log thread 1508058077.0465 at 1508058077.0466(s) Log thread 1508058076.0469 at 1508058077.0474(s) Log thread 1508058076.6647 at 1508058077.6659(s) Log thread 1508058076.6664 at 1508058077.6671(s)

有意思的是綠色條目代表的(模擬)線程和紅色條目代表的(模擬)線程的登記時間是一樣的,說明兩個(模擬)線程是并發(fā)執(zhí)行的。

2. PHP-FPM配置項pm.max_children = 10,simulated.thread記錄如下:

Log thread 1508061169.7956 at 1508061170.7963(s) Log thread 1508061169.7966 at 1508061170.7976(s) Log thread 1508061169.7978 at 1508061170.7988(s) Log thread 1508061170.2896 at 1508061171.2901(s) Log thread 1508061170.7972 at 1508061171.7978(s) Log thread 1508061171.7984 at 1508061171.7985(s) Log thread 1508061170.7982 at 1508061171.7986(s) Log thread 1508061170.7994 at 1508061171.8(s) Log thread 1508061171.2907 at 1508061172.2912(s) Log thread 1508061171.2912 at 1508061172.2915(s)

由于服務端并發(fā)連接處理能力上限達到10,因此最新生成的(模擬)線程登記可出現(xiàn)在任何位置。

3. 執(zhí)行usleep(500)延遲,simulated.thread記錄如下:

Log thread 1508059270.3195 at 1508059270.3206(s) Log thread 1508059270.3208 at 1508059270.3219(s) Log thread 1508059270.322 at 1508059270.323(s) Log thread 1508059270.323 at 1508059270.324(s) Log thread 1508059270.3244 at 1508059270.3261(s) Log thread 1508059270.3256 at 1508059270.3271(s) Log thread 1508059270.3275 at 1508059270.3286(s) Log thread 1508059270.3288 at 1508059270.3299(s) Log thread 1508059270.3299 at 1508059270.331(s) Log thread 1508059270.3313 at 1508059270.3314(s)

可見日志記錄順序與(模擬)線程生成的順序一致。usleep延遲的基本單位是微妙(us, 1 s = 1000000 us)。

從以上的記錄可以看出:

1)這些(模擬)線程是第一次請求執(zhí)行腳本后就自動生成的,一個(模擬)線程緊接著創(chuàng)建了另一個(模擬)線程;

2)這些(模擬)線程中有的是在同一個子進程空間中產(chǎn)生并運行的;

3)前后相鄰(模擬)線程生成時間間隔很小,幾乎是同時產(chǎn)生,或后一個(模擬)線程在前一個(模擬)線程尚未執(zhí)行結(jié)束并退出之前產(chǎn)生;

4)多個(模擬)線程之間可以并發(fā)執(zhí)行。

所以,上述模擬多線程并發(fā)的實現(xiàn)是成功的。PHP-FPM進程池中同一個子進程可先后處理多個連接請求,但同一時間只能處理一個連接請求,未處理連接請求將進入隊列等待處理。換句話,同一個子進程不具有并發(fā)處理連接請求的能力。

PHP-FPM Pool配置:它允許定義多個池,每個池可定義不同的配置項。以下只是列舉了我在探秘過程中還關注過的其他部分配置項

1、 listen:The address on which to accept FastCGI requests.它支持TCP Socket和unix socket兩種通訊協(xié)議。可設置listen = [::]:9000。

2、listen.allowed_clients:List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. 該配置項為逗號分隔的列表,如listen.allowed_clients = 127.0.0.1,172.17.0.5。

3、pm:Choose how the process manager will control the number of child processes. 該配置項設置FPM管理進程池的方式,包括static、dynamic、ondemand三種。

4、pm.max_requests:The number of requests each child process should execute before respawning. This can be useful to work around memory leaks in 3rd party libraries.設置每個子進程處理請求數(shù)的上限,對于處理第三方庫中的內(nèi)存泄漏很有用。

5、pm.status_path:The URI to view the FPM status page.

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产精品色在线网站| 亚洲尤物av| 老色鬼精品视频在线观看播放| 欧美影院视频| 欧美亚洲三级| 国产欧美日韩免费观看| 国产精品日韩精品中文字幕| 久久99久久久精品欧美| 精品免费视频| 狠狠久久伊人| 国内不卡的一区二区三区中文字幕| 国产精品xvideos88| 久久精品免费看| 福利一区视频| 亚洲成av人片一区二区密柚| 欧美不卡视频| 三级欧美韩日大片在线看| 亚洲精品乱码日韩| 国产三级一区| 福利一区二区免费视频| 亚洲播播91| 国产精品免费看| 亚洲精品极品| 美女毛片一区二区三区四区最新中文字幕亚洲| 久久精品国产免费| 麻豆视频在线看| 欧美亚洲国产一区| 巨乳诱惑日韩免费av| 日本欧美在线| 国产成人免费| 日韩视频不卡| 日本va欧美va瓶| 精品一区二区三区中文字幕视频 | 日韩中文字幕| 蜜桃久久久久| 亚洲一本视频| 综合一区二区三区| 韩日一区二区| 99国产精品| 国产欧美一区二区精品久久久 | 亚洲欧美网站在线观看| 国产乱人伦精品一区| 最近高清中文在线字幕在线观看1| 狠狠躁少妇一区二区三区| 国内精品福利| 日韩在线视频一区二区三区| 欧美激情综合| 欧美va亚洲va日韩∨a综合色| 日韩av一区二| 精品成人免费一区二区在线播放| 六月丁香综合| 国语对白精品一区二区| 欧美午夜不卡| 国产日本亚洲| 亚洲国产专区校园欧美| 偷拍亚洲精品| 日本蜜桃在线观看视频| 亚洲精品精选| 伊人久久av| 日韩精品视频网| 日韩精品免费一区二区三区| 日本午夜精品视频在线观看| 久久婷婷激情| 久久国产乱子精品免费女| 久久久噜噜噜| 国产日韩欧美三级| 亚洲免费精品| 四季av一区二区凹凸精品| 蜜臀久久久久久久| 日韩电影在线视频| 国产日韩高清一区二区三区在线| 亚洲一级黄色| 电影91久久久| 天堂va在线高清一区| 亚洲福利一区| 精品资源在线| 日韩三级一区| 国产一区导航| 韩国精品主播一区二区在线观看| 国产一区 二区| 免费观看日韩电影| 久久网站免费观看| 电影91久久久| 国产欧美日韩在线一区二区| 999在线观看精品免费不卡网站| 精品视频在线一区二区在线| 少妇精品久久久一区二区三区| 天堂日韩电影| 精品伊人久久| 国产一区 二区| aa国产精品| 国产精品高潮呻吟久久久久| 日韩在线二区| 午夜欧美精品| 国产成人a视频高清在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲高清av| 国产超碰精品| 久久精品女人| 欧美激情福利| 国产日韩一区二区三区在线播放| 麻豆成人在线| 99在线精品免费视频九九视| 99久久久国产精品美女| 97在线精品| 国产精品22p| 欧美亚洲人成在线| 日韩免费精品| 色综合视频一区二区三区日韩 | 久久久91麻豆精品国产一区| 色8久久久久| 蜜臀国产一区二区三区在线播放| 久久久久久久久久久9不雅视频| 日韩av免费大片| 老色鬼精品视频在线观看播放| 日本欧美在线| 中文字幕成人| 蜜臀av性久久久久蜜臀aⅴ四虎| 婷婷精品进入| 久久国产日韩| 欧美日韩国产传媒| 亚洲国内精品| 在线精品小视频| 日韩午夜av| 免费日韩av| 亚洲狼人精品一区二区三区| 日本亚州欧洲精品不卡| 日韩精品乱码av一区二区| 伊人www22综合色| 亚洲精品影院在线观看| 日本特黄久久久高潮| 欧美私人啪啪vps| 欧美黄页在线免费观看| 国产一区二区视频在线看| 欧美国产不卡| 国产成人a视频高清在线观看| 日韩精品中文字幕第1页| 久久影院一区| 9国产精品视频| 蜜臀av国产精品久久久久| 日韩av午夜在线观看| 国产精品一区二区精品视频观看 | 日韩和欧美一区二区| 青草国产精品| 国产精品黄色| 久久99精品久久久野外观看| 丁香婷婷久久| 亚洲午夜在线| 日韩专区一卡二卡| 欧美日韩亚洲国产精品| 老司机精品视频网| 久久婷婷丁香| 亚洲精品黄色| 欧美aⅴ一区二区三区视频| 激情综合婷婷| 国产综合视频| 四虎精品一区二区免费| 久久一区亚洲| 欧美日韩色图| 中文字幕日韩亚洲| 国产精品探花在线观看| 成人午夜网址| 日韩视频一区二区三区在线播放免费观看 | 久久精品国产99| 99视频精品全国免费| 久久亚洲色图| 麻豆一区二区99久久久久| 久久精品青草| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 亚洲精品九九| 国产中文字幕一区二区三区| 激情欧美一区| 免费在线观看精品| 麻豆免费精品视频| 99国产精品视频免费观看一公开| 亚洲毛片一区| 黑森林国产精品av| 蜜桃传媒麻豆第一区在线观看| 国产精品亚洲四区在线观看 | 综合日韩av| 亚洲不卡视频| 九九精品调教| 日本在线不卡视频一二三区| 四虎成人av| 三级欧美在线一区| 国产91欧美| 亚洲精品三级| 成人久久久久| 人人爱人人干婷婷丁香亚洲| 日韩中文在线播放| 国产亚洲精品精品国产亚洲综合| 日韩欧美午夜| 国产日韩一区二区三区在线播放| 久久高清免费| 老司机精品视频在线播放| 午夜一级久久| 波多视频一区| 欧美久久亚洲| 亚洲资源av| 色欧美自拍视频|