校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 基于PHP-FPM進(jìn)程池探秘

基于PHP-FPM進(jìn)程池探秘

熱門標(biāo)簽:襄陽房產(chǎn)電銷機器人招商 百度地圖標(biāo)注飯店位置怎么 深圳400電話辦理那家好 清遠(yuǎn)陽山400電話號碼如何申請 百度地圖標(biāo)注名編輯 怎么在高德地圖標(biāo)注行走軌跡 安徽移動外呼系統(tǒng) 施工地圖標(biāo)注怎么做 個性化地圖標(biāo)注在線

PHP 支持多進(jìn)程而不支持多線程;PHP-FPM 在進(jìn)程池中運行多個子進(jìn)程并發(fā)處理所有連接請求。通過 ps 查看PHP-FPM進(jìn)程池(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

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

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

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

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

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

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

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

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

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

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

2. 模擬多線程:

?php
/**
 * PHP 只支持多進(jìn)程不支持多線程。
 *
 * PHP-FPM 在進(jìn)程池中運行多個子進(jìn)程并發(fā)處理所有連接,
 * 同一個子進(jìn)程可先后處理多個連接請求,但同一時間
 * 只能處理一個連接請求,未處理連接請求將進(jìn)入隊列等待處理
 *
 */

class SimulatedThread
{
 //模擬線程
 private $thread;

 //主機名
 private $host = 'tcp://172.17.0.5';

 //端口號
 private $port = 80;

 public function __construct()
 {
  //采用當(dāng)前時間給線程編號
  $this->thread = microtime(true);
 }

 /**
  * 通過socket發(fā)送一個新的HTTP連接請求到本機,
  * 此時當(dāng)前模擬線程既是服務(wù)端又是模擬客戶端
  *
  * 當(dāng)前(程序)子進(jìn)程sleep(1)后會延遲1s才繼續(xù)執(zhí)行,但其持有的連接是繼續(xù)有效的,
  * 不能處理新的連接請求,故這種做法會降低進(jìn)程池處理并發(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}\r\n\r\n");
   sleep(1);//usleep(500)
   fclose($fp);
  }

  $this->log();
 }

 /**
  * 日志記錄當(dāng)前模擬線程運行時間
  *
  * @return void
  */
 private function log()
 {
  $fp = fopen('simulated.thread', 'a');
  fputs($fp, "Log thread {$this->thread} at " . microtime(true) . "(s)\r\n");

  fclose($fp);
 }
}

$thread = new SimulatedThread();
$thread->simulate();
echo "Started to simulate threads...";

探秘匯總:本人通過運行上述腳本后,發(fā)現(xiàn)一些可預(yù)料但卻不是我曾想到的結(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)在紅色標(biāo)示條目位置是因為進(jì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)

由于服務(wù)端并發(fā)連接處理能力上限達(dá)到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)這些(模擬)線程中有的是在同一個子進(jìn)程空間中產(chǎn)生并運行的;

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

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

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

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

1、 listen:The address on which to accept FastCGI requests.它支持TCP Socket和unix socket兩種通訊協(xié)議。可設(shè)置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. 該配置項設(shè)置FPM管理進(jìn)程池的方式,包括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è)置每個子進(jìn)程處理請求數(shù)的上限,對于處理第三方庫中的內(nèi)存泄漏很有用。

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

以上這篇基于PHP-FPM進(jìn)程池探秘就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • php-fpm中max_children的配置
  • centos7上編譯安裝php7以php-fpm方式連接apache
  • php-fpm.conf配置文件中文說明詳解及重要參數(shù)說明
  • php-fpm服務(wù)啟動腳本的方法
  • php性能分析之php-fpm慢執(zhí)行日志slow log用法淺析
  • Nginx使用的php-fpm的兩種進(jìn)程管理方式及優(yōu)化
  • 一文看懂PHP進(jìn)程管理器php-fpm

標(biāo)簽:黑河 延邊 臨夏 阜陽 南昌 欽州 中衛(wèi) 駐馬店

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于PHP-FPM進(jìn)程池探秘》,本文關(guān)鍵詞  基于,PHP-FPM,進(jìn)程,池,探秘,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于PHP-FPM進(jìn)程池探秘》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于PHP-FPM進(jìn)程池探秘的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产精品系列在线| 欧美系列一区二区| 国产亚洲欧美日韩日本| 久久91精品国产91久久小草| 2021中文字幕一区亚洲| 国产99精品视频| 亚洲女人****多毛耸耸8| 欧美亚洲一区二区在线观看| 日韩国产高清在线| 久久九九久久九九| 91丨porny丨中文| 亚洲高清视频的网址| 日韩欧美久久久| 粗大黑人巨茎大战欧美成人| 亚洲欧美成aⅴ人在线观看| 欧美猛男gaygay网站| 久久se精品一区二区| 国产精品免费网站在线观看| 色一区在线观看| 久久99久久久欧美国产| 国产精品欧美精品| 欧美男男青年gay1069videost| 麻豆国产欧美日韩综合精品二区| 中文字幕第一区二区| 欧美日韩日本视频| 国产精品18久久久久久久久久久久 | 日韩伦理电影网| 884aa四虎影成人精品一区| 久久精品国产成人一区二区三区| 国产精品蜜臀在线观看| 欧美日韩在线不卡| 成人一区二区在线观看| 肉色丝袜一区二区| 国产精品免费久久| 日韩欧美中文字幕一区| 99re成人精品视频| 韩国av一区二区三区在线观看| 国产精品动漫网站| 精品日韩99亚洲| 色欧美乱欧美15图片| 国产一区二区中文字幕| 一区av在线播放| 国产欧美日韩精品在线| 欧美日韩在线不卡| 97久久精品人人做人人爽| 另类综合日韩欧美亚洲| 夜夜夜精品看看| 欧美国产日本视频| 精品福利在线导航| 欧美军同video69gay| 色婷婷国产精品| 9色porny自拍视频一区二区| 国产综合色在线| 日本不卡不码高清免费观看| 亚洲一区二区高清| 国产精品久久毛片| 久久久久国产一区二区三区四区| 欧美精品在线一区二区三区| 色网站国产精品| 99久久伊人网影院| 高清国产午夜精品久久久久久| 九九热在线视频观看这里只有精品| 亚洲午夜久久久| 一区二区三区中文字幕精品精品| 国产欧美视频一区二区| 精品免费日韩av| 日韩精品中文字幕一区| 欧美一区二区人人喊爽| 欧美日本高清视频在线观看| 一本大道久久a久久综合| 波多野结衣中文一区| 大胆欧美人体老妇| 成人激情综合网站| 99久久精品免费看国产免费软件| 高潮精品一区videoshd| 国产精品一级在线| 粉嫩av一区二区三区在线播放| 国产精品影视网| 国产精品亚洲一区二区三区妖精 | 国产.欧美.日韩| 成人午夜大片免费观看| 国产成人精品三级麻豆| 国产成人一区二区精品非洲| 国产成人午夜视频| 成人不卡免费av| 91麻豆.com| 欧美日韩视频第一区| 67194成人在线观看| 欧美大尺度电影在线| 久久久青草青青国产亚洲免观| 久久久综合网站| 国产精品乱码一区二区三区软件| 国产精品人成在线观看免费 | 欧美日韩免费在线视频| 在线播放中文字幕一区| 91精品国模一区二区三区| www精品美女久久久tv| 国产精品天干天干在线综合| 亚洲三级在线看| 性久久久久久久| 国产一区二区视频在线| 91视频在线看| 91精品国产欧美日韩| 精品国产乱码久久久久久夜甘婷婷| 久久久久久久久97黄色工厂| 亚洲天堂免费看| 无吗不卡中文字幕| 粉嫩欧美一区二区三区高清影视| 91免费观看在线| 欧美一区二区黄色| 欧美国产97人人爽人人喊| 亚洲一区免费视频| 国产精品原创巨作av| 欧美中文字幕一区二区三区 | 欧美性三三影院| 久久久综合网站| 亚洲观看高清完整版在线观看| 狠狠色丁香久久婷婷综合_中| 91麻豆产精品久久久久久 | 成人免费观看av| 4438亚洲最大| 亚洲色图视频网站| 精品一区二区三区视频在线观看| 日本高清成人免费播放| 精品国产sm最大网站| 亚洲精品乱码久久久久久黑人| 美女网站色91| 色av一区二区| 久久久精品免费观看| 图片区日韩欧美亚洲| av一区二区三区| 久久嫩草精品久久久久| 亚洲不卡av一区二区三区| 不卡高清视频专区| 久久亚洲欧美国产精品乐播| 亚洲国产欧美在线| jlzzjlzz国产精品久久| 亚洲精品在线免费观看视频| 亚洲一区国产视频| 99精品热视频| 国产精品国产自产拍高清av| 久久电影国产免费久久电影| 欧美视频自拍偷拍| 一区二区视频在线看| 成人免费av在线| 国产日韩综合av| 韩国三级在线一区| 日韩一区二区三区三四区视频在线观看| 亚洲精品第一国产综合野| 成人性生交大片免费看视频在线 | 国产91精品露脸国语对白| 日韩精品综合一本久道在线视频| 亚洲成av人影院在线观看网| 色综合久久99| 亚洲你懂的在线视频| 成a人片亚洲日本久久| 国产欧美日韩三级| 夫妻av一区二区| 国产日韩高清在线| 粉嫩aⅴ一区二区三区四区| 久久在线免费观看| 国产毛片一区二区| 久久精品人人做| 国产成人久久精品77777最新版本| 日韩精品一区二| 精品在线播放午夜| xvideos.蜜桃一区二区| 国产成人8x视频一区二区| 国产精品亲子乱子伦xxxx裸| 成人精品一区二区三区中文字幕| 国产精品视频线看| 国产v综合v亚洲欧| 中文字幕亚洲一区二区va在线| 97久久超碰精品国产| 亚洲黄色免费网站| 欧美日韩大陆一区二区| 爽好久久久欧美精品| 日韩三级在线观看| 精品在线观看免费| 中文字幕制服丝袜一区二区三区| 色综合久久久网| 日韩av在线播放中文字幕| 欧美xxxxx牲另类人与| 国产福利精品导航| 亚洲精品你懂的| 日韩一区二区精品在线观看| 精品影院一区二区久久久| 国产欧美日韩精品在线| 91黄视频在线观看| 日韩影院免费视频| 久久综合久色欧美综合狠狠| 丁香六月综合激情| 亚洲二区在线视频| 精品国产3级a| 色综合色综合色综合| 欧美aaaaa成人免费观看视频| 久久久精品免费免费| 91成人免费电影| 精品午夜一区二区三区在线观看| 中文字幕一区三区|