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

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

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

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

PHP 支持多進(jìn)程而不支持多線程;PHP-FPM 在進(jìn)程池中運(yùn)行多個(gè)子進(jìn)程并發(fā)處理所有連接請(qǐng)求。通過 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中有兩個(gè)尚處于空閑狀態(tài)的子進(jìn)程PID 8和 PID 9。注:NLWP指輕量級(jí)進(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開放擴(kuò)展,其主要行為是將CGI解釋器進(jìn)程保持在內(nèi)存中更長(zhǎng)時(shí)間,不是fork-and-execute,并因此獲得較高的性能。FastCGI支持分布式部署,可以部署在WEB服務(wù)器以外的多個(gè)主機(jī)上。

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

相關(guān)學(xué)習(xí)推薦:PHP編程從入門到精通

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

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

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

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

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

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

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

2. 模擬多線程:

<?php /**  * PHP 只支持多進(jìn)程不支持多線程。  *  * PHP-FPM 在進(jìn)程池中運(yùn)行多個(gè)子進(jìn)程并發(fā)處理所有連接,  * 同一個(gè)子進(jìn)程可先后處理多個(gè)連接請(qǐng)求,但同一時(shí)間  * 只能處理一個(gè)連接請(qǐng)求,未處理連接請(qǐng)求將進(jìn)入隊(duì)列等待處理  *  */  class SimulatedThread {  //模擬線程  private $thread;   //主機(jī)名  private $host = 'tcp://172.17.0.5';   //端口號(hào)  private $port = 80;   public function __construct()  {   //采用當(dāng)前時(shí)間給線程編號(hào)   $this->thread = microtime(true);  }   /**   * 通過socket發(fā)送一個(gè)新的HTTP連接請(qǐng)求到本機(jī),   * 此時(shí)當(dāng)前模擬線程既是服務(wù)端又是模擬客戶端   *   * 當(dāng)前(程序)子進(jìn)程sleep(1)后會(huì)延遲1s才繼續(xù)執(zhí)行,但其持有的連接是繼續(xù)有效的,   * 不能處理新的連接請(qǐng)求,故這種做法會(huì)降低進(jìn)程池處理并發(fā)連接請(qǐng)求的能力,   * 類似延遲處理還有time_nanosleep()、time_sleep_until()、usleep()。   * 而且sleep(1)這種做法并不安全,nginx依然可能出現(xiàn)如下錯(cuò)誤:   * “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個(gè)線程    $fp = fsockopen($this->host, $this->port);    fputs($fp, "GET {$_SERVER['PHP_SELF']}?run={$run}rnrn");    sleep(1);//usleep(500)    fclose($fp);   }    $this->log();  }   /**   * 日志記錄當(dāng)前模擬線程運(yùn)行時(shí)間   *   * @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...";

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

1. PHP-FPM配置項(xiàng)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)示條目位置是因?yàn)檫M(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)

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

2. PHP-FPM配置項(xiàng)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)這些(模擬)線程是第一次請(qǐng)求執(zhí)行腳本后就自動(dòng)生成的,一個(gè)(模擬)線程緊接著創(chuàng)建了另一個(gè)(模擬)線程;

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

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

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

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

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

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. 該配置項(xiàng)為逗號(hào)分隔的列表,如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. 該配置項(xiàng)設(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è)置每個(gè)子進(jìn)程處理請(qǐng)求數(shù)的上限,對(duì)于處理第三方庫中的內(nèi)存泄漏很有用。

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
嫩呦国产一区二区三区av| 精品伊人久久| 亚洲a在线视频| 成人羞羞视频在线看网址| 国产高清不卡| 亚洲午夜91| 午夜在线视频一区二区区别| 免费黄色成人| 亚洲欧美久久| 国产亚洲久久| 国产h片在线观看| 亚洲大全视频| 日韩黄色在线观看| 欧美午夜三级| 超碰在线99| 欧美女激情福利| 日韩精品a在线观看91| 久久精品一区二区国产| 久久激情婷婷| 亚洲精品一级| 国产精品二区不卡| 亚洲欧洲一区| 国产欧美日韩精品高清二区综合区| 精品久久99| 中文亚洲免费| 国产精品久久久久久模特 | 国产乱人伦精品一区| 国产精品黑丝在线播放| 婷婷中文字幕一区| 青青国产精品| 欧美日韩在线播放视频| 88久久精品| 国内亚洲精品| 国产欧美日韩一区二区三区四区| 久久激情婷婷| 国产伦理久久久久久妇女| 香蕉视频成人在线观看| 久久激情av| 欧美午夜精彩| 三级亚洲高清视频| 精品一区二区三区亚洲| 在线综合视频| 天堂av在线| 亚洲精品伦理| 久久九九精品| 国产情侣一区在线| 不卡在线一区二区| 久久精品国产亚洲一区二区三区| 性色av一区二区怡红| 福利一区二区| 亚洲3区在线| 免费国产自久久久久三四区久久 | 黄色日韩精品| 狂野欧美性猛交xxxx| 天使萌一区二区三区免费观看| 国内精品伊人| 日本免费新一区视频| 亚洲男女av一区二区| 国产精品麻豆久久| 欧美日一区二区在线观看| 蜜桃精品在线| 麻豆中文一区二区| 亚洲精品欧美| 伊人精品视频| 在线一区av| 久久午夜影院| 天堂久久av| 亚洲激情av| 成人久久久久| 91亚洲国产成人久久精品| 欧美一区精品| 亚洲精品影视| 免费精品视频最新在线| 亚洲精品1区| 欧美日韩国产探花| 欧美~级网站不卡| 亚洲成人va| 日韩成人综合| 欧美成人a交片免费看| 精品国产乱码久久久久久樱花| 18国产精品| 日韩欧美三区| 亚洲精品无吗| 日韩欧美2区| 亚洲97av| 久久国产精品免费一区二区三区| 天堂va在线高清一区| 在线一区二区三区视频| 亚洲制服少妇| 免费在线视频一区| 亚洲五月综合| 亚洲va久久久噜噜噜久久| 中文字幕亚洲影视| 亚洲精品国产日韩| 人人精品久久| 日本va欧美va精品发布| 日本成人手机在线| 日本国产欧美| 丁香六月综合| 国产一区二区三区四区| 粉嫩av一区二区三区四区五区 | 久热精品在线| 亚洲一区二区三区久久久| 亚洲精品视频一二三区| 日韩精选在线| 欧美在线观看天堂一区二区三区| 日本综合精品一区| 麻豆成人综合网| 国产精品蜜芽在线观看| 国产精品午夜av| 国产精品久久国产愉拍| 精品免费av| 成人羞羞视频在线看网址| 欧美日韩黑人| 亚洲精品福利| 岛国精品一区| 欧美日韩免费观看一区=区三区| 亚洲免费中文| 久久国产麻豆精品| 午夜影院一区| 蜜臀国产一区二区三区在线播放| 欧美日韩亚洲一区在线观看| 精品日韩在线| 99在线|亚洲一区二区| 亚洲三级网站| 麻豆免费精品视频| 91精品国产调教在线观看 | 蜜桃久久久久久久| 国产乱码精品一区二区亚洲| 日本久久精品| 国产精品普通话对白| 欧美一级一区| 亚洲成人不卡| 日韩精品一区二区三区中文 | 亚洲www啪成人一区二区| 99亚洲视频| 国产精品一区二区三区美女| 中文字幕在线视频网站| 免费日韩av| 欧美韩一区二区| 91高清一区| 你懂的国产精品永久在线| 91成人超碰| 精品视频一二| 男人天堂欧美日韩| 久久不见久久见免费视频7| 欧美午夜精彩| 麻豆国产欧美日韩综合精品二区| 午夜电影亚洲| 国产精品美女午夜爽爽| 欧美日韩国产一区精品一区| 国产精品hd| 亚洲大全视频| 麻豆精品在线视频| 亚洲视频国产精品| 日韩伦理福利| 国产精品巨作av| 日韩专区在线视频| 国产激情在线播放| 日韩一区二区三区免费视频| 播放一区二区| 国产精品xxxav免费视频| 99香蕉国产精品偷在线观看| 国产美女高潮在线| 欧美视频二区| 久热综合在线亚洲精品| 日韩成人亚洲| 国产欧美一级| 蜜桃视频第一区免费观看| 久久久久中文| 成人污污视频| 国产精品一区二区美女视频免费看 | 欧美专区在线| 亚洲欧洲专区| 五月精品视频| 中文字幕在线视频久| 国产欧美日韩在线一区二区| 日韩电影免费网站| 精品亚洲成人| 国产日韩三级| 日韩美女精品| 美国三级日本三级久久99| 亚洲精品极品少妇16p| 色天使综合视频| 综合日韩av| 国精品产品一区| 成人在线视频免费看| 美女性感视频久久| 久久av影院| 国产精品亚洲一区二区在线观看| 亚洲毛片在线免费| 亚洲日本免费电影| 亚洲一卡久久| 欧美国产91| 一区三区视频| 午夜一级在线看亚洲| 久久香蕉精品| 免费看精品久久片| 亚洲ww精品| 日韩高清成人在线|