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

站長資訊網
最全最豐富的資訊網站

探秘基于PHP-FPM進程池

探秘基于PHP-FPM進程池

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

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

相關學習推薦:php編程(視頻)

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

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

探秘手段:模擬多線程并發執行

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

(1)線程狀態;

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

(3)一組執行堆棧;

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

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

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

2. 模擬多線程:

<?php /**  * PHP 只支持多進程不支持多線程。  *  * PHP-FPM 在進程池中運行多個子進程并發處理所有連接,  * 同一個子進程可先后處理多個連接請求,但同一時間  * 只能處理一個連接請求,未處理連接請求將進入隊列等待處理  *  */  class SimulatedThread {  //模擬線程  private $thread;   //主機名  private $host = 'tcp://172.17.0.5';   //端口號  private $port = 80;   public function __construct()  {   //采用當前時間給線程編號   $this->thread = microtime(true);  }   /**   * 通過socket發送一個新的HTTP連接請求到本機,   * 此時當前模擬線程既是服務端又是模擬客戶端   *   * 當前(程序)子進程sleep(1)后會延遲1s才繼續執行,但其持有的連接是繼續有效的,   * 不能處理新的連接請求,故這種做法會降低進程池處理并發連接請求的能力,   * 類似延遲處理還有time_nanosleep()、time_sleep_until()、usleep()。   * 而且sleep(1)這種做法并不安全,nginx依然可能出現如下錯誤:   * “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...";

探秘匯總:本人通過運行上述腳本后,發現一些可預料但卻不是我曾想到的結果

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)

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

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)

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

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)

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

3. 執行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)這些(模擬)線程是第一次請求執行腳本后就自動生成的,一個(模擬)線程緊接著創建了另一個(模擬)線程;

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

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

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

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

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

1、 listen:The address on which to accept FastCGI requests.它支持TCP Socket和unix socket兩種通訊協議。可設置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.設置每個子進程處理請求數的上限,對于處理第三方庫中的內存泄漏很有用。

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

相關學習推薦:編程視頻

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
激情综合五月| 国产农村妇女精品一二区| 亚洲午夜久久久久久尤物| 日本免费在线视频不卡一不卡二| 成人美女视频| 成人免费电影网址| 久久国产免费| 日韩一区三区| 亚洲欧美久久久| 久久国产生活片100| 国产精品网址| 99久精品视频在线观看视频| 美女毛片一区二区三区四区| 日韩欧美中文字幕电影| 亚洲精品亚洲人成在线观看| 久久国产乱子精品免费女| 久久精品电影| 欧美日本不卡高清| 给我免费播放日韩视频| 精品成人18| 日韩国产在线一| 日韩欧美中文字幕一区二区三区| 亚洲欧洲日韩| 久久精品超碰| 美女国产精品久久久| 精品三级av| 伊人久久视频| 午夜免费一区| 欧美另类综合| 亚洲主播在线| 精品视频在线观看网站| 亚洲一区亚洲| 日韩成人a**站| 日韩中文字幕| 日韩精品中文字幕一区二区| 国产精品国产三级国产在线观看| 99久久久久久中文字幕一区| 婷婷综合福利| 亚洲一级黄色| 国产精品黑丝在线播放| 免费看日韩精品| 日韩大片在线观看| 国产精品久久久久久久久久妞妞 | 日韩三级视频| 欧美三级网址| 日韩精品导航| 国产高清精品二区| 亚洲综合另类| 在线国产一区二区| 亚洲www啪成人一区二区| jiujiure精品视频播放| 日韩中文字幕一区二区三区| 久久精品欧美一区| 香蕉精品久久| 欧美一区二区三区久久精品| 日韩一区亚洲二区| 日韩国产欧美三级| 欧美丝袜一区| 国产精品一区2区3区| 激情六月综合| 久久精品国产99| 亚洲有吗中文字幕| 日韩国产成人精品| 亚洲人亚洲人色久| 视频国产精品| 国产精品99久久免费| 国产精品中文| 国产精品白浆| 婷婷激情一区| 性欧美长视频| 国产一区福利| 欧美日韩视频免费观看| 激情综合自拍| 中文字幕日韩欧美精品高清在线| 综合欧美精品| 精品视频99| 91欧美在线| 国产精品欧美三级在线观看| 另类欧美日韩国产在线| av成人国产| 久久精品一区二区三区中文字幕| 欧美不卡高清一区二区三区| 欧美一区=区三区| 美女91精品| 国产精品成人自拍| 999久久久精品国产| 巨乳诱惑日韩免费av| 亚洲国产福利| 国产精品视频一区二区三区综合| 亚洲一区二区三区高清| 国产精品成人a在线观看| 亚洲一级在线| 伊人久久大香线蕉av不卡| 高清久久精品| 丝袜美腿诱惑一区二区三区| 老牛国产精品一区的观看方式| 麻豆91精品视频| 亚洲a成人v| 欧美精品羞羞答答| 日韩一区二区三免费高清在线观看 | 亚洲精品动态| 精品免费视频| 欧洲av一区二区| 国产乱码精品一区二区三区亚洲人| 91精品91| 日本不卡免费高清视频在线| 日韩二区在线观看| 日韩一区中文| 四虎在线精品| 亚洲精品日本| 麻豆91小视频| 国产极品久久久久久久久波多结野| 欧美激情麻豆| 亚洲尤物在线| 欧美日韩中文字幕一区二区三区| 免费一区二区视频| 欧美激情日韩| 国产伦久视频在线观看| 伊人影院久久| 91精品在线免费视频| 亚洲精品乱码日韩| 综合精品一区| 日韩精品久久理论片| 亚洲精品观看| 欧美日韩一区二区国产| 国产亚洲人成a在线v网站| 日韩精品免费视频人成| 日韩欧美在线精品| 亚洲精品1区| 午夜国产一区二区| 亚洲1区在线观看| 久久精品av麻豆的观看方式| 久久国产三级精品| 国产欧美一区二区三区国产幕精品| 欧美激情在线精品一区二区三区| 欧洲激情综合| 亚洲国产一区二区三区在线播放| 视频精品一区二区| 啪啪亚洲精品| 久久成人av| 亚洲www啪成人一区二区| 亚洲激情中文| 久久久久亚洲精品中文字幕| 99视频精品视频高清免费| 亚洲深爱激情| 精品国产乱码| 日本亚洲不卡| 91成人在线精品视频| 午夜久久久久| 亚洲精品进入| 久久久影院免费| 日韩精选在线| 美女性感视频久久| 日韩国产欧美视频| 国产亚洲一区在线| 国产精品mm| 国产成人77亚洲精品www| 久久久久国产| 国产精品伦一区二区| 日韩国产在线一| 国产亚洲一卡2卡3卡4卡新区| 免费在线亚洲欧美| 久久永久免费| 99精品网站| 中文字幕av一区二区三区人| 国产精品videossex| 欧洲av一区二区| 久久先锋影音| 亚洲一区二区网站| 另类激情亚洲| 国产精品成久久久久| 日本免费在线视频不卡一不卡二| 久久精品91| 日韩不卡手机在线v区| 欧美+日本+国产+在线a∨观看| 91亚洲无吗| 日韩福利视频网| 亚洲欧美日韩在线观看a三区| 激情久久一区二区| 久久影院资源站| 精品一区二区三区中文字幕视频| 国产精品尤物| 欧美激情另类| 日产精品一区| 色婷婷狠狠五月综合天色拍| 日韩精品第一区| 99久久www免费| 欧美午夜不卡影院在线观看完整版免费| 亚洲夜间福利| 久热精品在线| 中文在线一区| 91欧美在线| 亚洲另类黄色| 深夜福利一区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 亚洲精品在线影院| 亚洲tv在线| 久久97视频| 亚洲三级国产| 国内亚洲精品|