php中的fpm PHP中的FPM是做什麼的

2021-10-22 22:46:32 字數 2935 閱讀 7870

fpm是fastcgi process manager的縮寫,由全稱我們可以知道其和fastcgi有關,就是乙個fastcgi的程序管理器。對於fastcgi我們可以理解成乙個協議,兒fpm是其在php中的乙個實現。

fpm的出現實現了php應用的分布式部署,這樣使得php和web伺服器可以在不同的機器上。當然與其說是fpm不如說是fastcgi的出現。最初fpm並沒有被php的官方正式應用於php中,只是作為php的乙個補丁應用。但是自從php5.3.3版本以後fpm被正式**進php中,作為了php的一部分。這樣我們配置起來比較方便,只需在php編譯的時候新增—enable-fpm選項即可

php-5.6.9]# ./configure –enable-fpm

fpm的簡單配置

fpm在php編譯的時候新增—enable-fpm選項即可啟動fpm,此外在編譯的時候還有兩個選項分別是 –with-fpm-user=user 和—with-fpm-group=group,用來設定fpm所屬的使用者和使用者組。如果不指定這兩項,那預設的使用者和使用者組都是nobody。當然這兩項也可以在fpm的配置檔案php-fpm.conf(其所在目錄為php安裝目錄/etc/php-fpm.conf)中修改。

user = nobody

//所屬使用者

group = nobody

//所屬組

listen = 127.0.0.1:9000

//fpm所在伺服器的ip位址和監聽的埠號,預設為9000

pm = dynamic

//設定程序管理器是如何管理子程序的,dynamic動態管理至少會有乙個子程序被建立,其數量有個最大值由pm.max_children來設定,而建立的數量由pm.start_servers來設定;static 靜態管理設定固定數量的子程序隨著服務啟動而被建立;ondemand 在服務啟動的時候並不建立子程序只是當有請求的時候才根據情況建立。

pm.max_children = 10

//當pm設定為static的時候,此值表示隨著服務的啟動建立的子程序的數量;當pm設定為dynamic或者ondemand的時候,此值表示建立的子程序最多不能超過此數量

pm.start_servers = 2

//表示隨著服務啟動建立的子程序(注意這裡是子程序而不是執行緒)的數量,此選項只有在pm 設定為dynamic的時候才有效。並且這個值預設設定為 min_spare_servers + (max_spare_servers – min_spare_servers)/2,並且如果此值設為0,那麼建立的子程序的數量也是由上述公式決定。

pm.min_spare_servers = 1

//要求閒置的服務程序的數量的最小值

pm.max_spare_servers = 3

//閒置的服務程序的數量的最大值

pm.process_idle_timeout = 10s

//程序的閒置時間,以秒為單位,超過這個時間該程序將會被殺死

fpm的應用

下面我們來看一下如何管理fastcgi服務,首先我們可以進入php安裝目錄

~]# cd /usr/local/php5

php5]# ./sbin/php-fpm

//開啟fastcgi服務,開啟服務以後會在/usr/local/php5/var/run/php-fpm.pid中有fastcgi主程序id

php5]# kill –int `cat /usr/local/php5/var/run/php-fpm.pid`

//關閉fastcgi服務

php5]# kill –usr2 ` cat /usr/local/php5/var/run/php-fpm.pid`

//重啟fastcgi服務

fpm使用說明

在fpm簡單配置中我們提到pm=dynamic和pm.start_servers =2。當開啟fastcgi服務以後首先我們檢視 php-fpm.pid

php5]# cat /usr/local/php5/var/run/php-fpm.pid //其結果為

php5]# ps x | grep php-fpm   //接著我們使用此命令檢視其主程序情況

32407 ?        ss     0:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)

php5]# ps –ef | grep php-fpm         //然後再使用該命令檢視其所有程序情況

root  32407 1 0 13:46 ? 00:00:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)

nobody   32408 32407  0 13:46 ?        00:00:00 php-fpm: pool www

nobody   32409 32407  0 13:46 ?        00:00:00 php-fpm: pool www

在這裡我們看到了三條資訊,第一條是主程序,由系統建立,其id為32407,父程序id為1。剩餘兩條是其子程序,因為在pm.start_servers = 2 我們設定的為2,所以隨著服務的啟動會建立兩個子程序。這兩個子程序的使用者都是nobody(user=nobody),其程序id分別是 32408、32409,第三項是這兩個子程序的父程序的id 32407。

當然fpm至少會建立乙個子程序,因為如果start_servers 設定為0 那麼其會根據上面我們說的那個公式計算出子程序的數量。當然如果我們設定min_spare_servers 和max_spare_servers都為0,那子程序的數量為0,這樣的話是不能啟動服務的(這些設定有效的前提是pm設為dynamic)。因為fpm使用使用者為nobody的子程序來處理請求的,那個由系統建立的主程序——id為32407,所屬使用者為root——是不能處理請求的。當然我們可以根據我們伺服器的實際情況(例如:記憶體大小)來優化我們這裡的程序數量。

以上只是簡單的介紹了fpm的配置與使用,目的就是為了說明fpm的作用。

在FP中如何設定條件斷點

貌似很多書上沒講,很多人也不會,我在這裡講一下。調出breakpoint list 在debug選單裡面 你可以看到你現在設的所有斷點的列表。選乙個來edit或者new乙個,你可以看到如圖的視窗。裡面的name是檔名 pas line是表示斷點設在程式 的第幾行。ignore count很有用,裡面...

php中mysql函式 PHP中的MySQL函式

本篇主要介紹採用php語言如何連線mysql資料庫。首先需要檢測服務mysql是否開啟成功。檢視phpinfo 函式 使用php運算元據庫的步驟 一 連線資料庫伺服器 二 選擇資料庫 mysql select db 資料庫名 三 設定編碼格式 mysql set charset utf 8 四 資料...

php中mysql的使用 PHP中MySQL的使用

連線到mysql mysql connect dbc mysql connect host,user,password 選擇當前資料庫 mysql select db database name mysql select db database name conn eg mysql select d...