A. 如何在php-fpm與php.ini
/usr/local/php/sbin/php-fpm
/usr/local/php/etc/php-fpm.conf
/usr/local/php/etc/php.ini
一,php-fpm的啟動參數
#測試php-fpm配置
/usr/local/php/sbin/php-fpm -t
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t
#啟動php-fpm
/usr/local/php/sbin/php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf
#關閉php-fpm
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
#重啟php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
二,php-fpm.conf重要參數詳解
pid = run/php-fpm.pid
#pid設置,默認在安裝目錄中的var/run/php-fpm.pid,建議開啟
error_log = log/php-fpm.log
#錯誤日誌,默認在安裝目錄中的var/log/php-fpm.log
log_level = notice
#錯誤級別. 可用級別為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice.這樣試試呢如果還有不明白的話,你也可以去後盾人平台看看php基礎教學視頻看看,也是不錯的選擇,希望能幫到你,給個採納吧╮( ̄▽ ̄)╭謝謝
B. 如何設置php-fpm的參數選項clear
如何設置php-fpm的參數選項clear
#include"stdio.h"
main()
{
char st[15];
printf("input string:\n");
gets(st);
puts(st);
}
可以看出當輸入的字元串中含有空格時,輸出仍為全部字元串。說明gets函數並不以空格作為字元串輸入結束的標志,而只以回車作為輸入結束。這是與scanf函數不同的。
3. 字元串連接函數strcat
格式: strcat (字元數組名1,字元數組名2)
功能:把字元數組2中的字元串連接到字元數組1 中字元串的後面,並刪去字元串1後的串標志「\0」。本函數返回值是字元數組1的首地址。
【例7.14】
C. php5.3/5.4/5.5 如何配置php-fpm.conf
首先,配置分為兩個部分,第一部分 [global] 為全局配置項,用來定義日誌、pid等相關內容。
第二部分[www], 這個為資源池配置項,其中[]內的字元串為自定義內容,我們也可以寫成域名,
這部分內容用來定義,各個域名所使用的資源分配。
1. listen 用來定義該資源池所監聽的socket,也可以是tcp形式;
2. user、group用來定義php-fpm以哪個賬號和組的身份來運行;
3. pm = dynamic 如何控制子進程,選項有static和dynamic。
如果選擇static,則由pm.max_children指定固定的子進程數。
如果選擇dynamic,則由以下參數決定:
pm.max_children ,子進程最大數
pm.start_servers ,啟動時的進程數
pm.min_spare_servers ,保證空閑進程數最小值,如果空閑進程小於此值,則創建新的子進程
pm.max_spare_servers ,保證空閑進程數最大值,如果空閑進程大於此值,此進行清理
對於專用伺服器,pm可以設置為static。
4. pm.max_children 這個選項來定義,最大開啟的php-fpm子進程數量,根據機器的硬體配置來定義,如果內存高於4G,設置為200或者以上,如果低於4G,比如1G內存,設置50就可以了
5. pm.max_requests 設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置為 』0′ 則一直接受請求. 設置為500就可以了。
6. rlimit_files = 1024 設置文件打開描述符的rlimit限制. 一般情況下,設置為1024就足夠了。
除了這些配置參數外,另外還有幾個常用的,那就是sloglog和open_basedir
7. slowlog = log/www.discuz.net.slow 這里定義,slow log的路徑,當php腳本執行時間超過 request_slowlog_timeout 值時,會記錄slowlog 它用來幫助我們排查程序哪裡有問題,提高程序的處理速度。
8. request_slowlog_timeout = 1 php腳本執行超時時間
9. php_admin_value[open_basedir]=/data/www/:/tmp/
這個選項是非常關鍵的安全選項,把php的執行賬號只限定在指定的目錄里,這樣可以防止網站被入侵後,黑客獲取其他站點的文件信息和伺服器的某些關鍵信息。
D. php-fpm的簡介
PHP-FPM(FastCGI Process Manager:FastCGI進程管理器)對於PHP 5.3.3之前的php來說,是一個補丁包 ,旨在將FastCGI進程管理整合進PHP包中。如果你使用的是PHP5.3.3之前的PHP的話,就必須將它patch到你的PHP源代碼中,在編譯安裝PHP後才可以使用。
從PHP 5.4 RC2開始,php-fpm已經轉正了,不再被php團隊標注為EXPERIMENTAL(實驗性的東西) 。
相對Spawn-FCGI,PHP-FPM在CPU和內存方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。
PHP5.3.3已經集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了。在./configure的時候帶 –enable-fpm參數即可開啟PHP-FPM。
使用PHP-FPM來控制PHP-CGI的FastCGI進程
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 啟動php的fastcgi進程
--stop 強制終止php的fastcgi進程
--quit 平滑終止php的fastcgi進程
--restart 重啟php的fastcgi進程
--reload 重新平滑載入php的php.ini
--logrotate 重新啟用log文件
E. php-fpm worker設置多少最佳
1、php-fpm優化參數介紹
他們分別是:pm、pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers。
pm:表示使用那種方式,有兩個值可以選擇,就是static(靜態)或者dynamic(動態)。
在更老一些的版本中,dynamic被稱作apache-like。這個要注意看配置文件的說明。
F. 了解PHP-FPM
在伺服器上,當我們查看php進程時,全都是php-fpm進程,大家都知道這個就是php的運行環境,那麼,它到底是個什麼東西呢?
PHP-FPM,就是PHP的FastCGI管理器,用於替換PHP FastCGI的大部分附加功能,在PHP5.3.3後已經成為了PHP的標配。
有小夥伴要問了,FastCGI又是什麼鬼?CGI程序又叫做「通用網關介面」,就是讓Web伺服器和你的應用程序進行交互的一個介面。就像nginx中需要配置的fastcgi_pass,一般我們會使用127.0.0.1:9000或者unix:/tmp/php-cgi.sock來配置這個參數。它的意思就是告訴nginx,過來的請求使用tcp:9000埠的監聽程序來處理或者使用unix/socket來處理。它們都是指向的PHP運行程序。
再說得通俗一點,我們運行php腳本用的是
php-fpm就相當於是這個php命令。nginx通過fastcgi_pass來運行php $nginx_root(nginx配置文件中網站根目錄root配置)下的index.php。所以,如果你用的是python或者其他什麼語言,都可以用它們的cgi程序來讓nginx調用。
FastCGI和CGI又有什麼不同呢?FastCGI是啟動一個socket介面,伺服器應用不需要自己去運行php,只需要向這個socket介面提交請求就可以了。
php-fpm在編譯php時需要添加--enable-fpm。一些通用的集成安裝包如lnmp、phpStudy等都會默認編譯並使用php-fpm,畢竟是標配。
上文中說過nginx可以使用127.0.0.1:9000和unix:/tmp/php-cgi.sock這兩種方式來調用php-fpm。它們有什麼區別呢?
前者,一般帶9000埠號的,是tcp形式的調用。也就是php-fpm啟動了一個監聽進程對9000埠進行監聽。它會調起一個tcp/ip服務,nginx在調用的時候會走一次tcp請求流程,也就是3次握手4次揮手,會走到網路七層中的第四層傳輸層。相對來說這種方式性能會稍差一點,啟動php-fpm後使用nestat查看埠中會出現9000埠的佔用。
後者,使用的是unix套接字socket服務,通過sock文件來交換信息,性能相對好一些,因為它沒有tcp連接過程,也不會有9000埠的佔用。
對於高負載大訪問量的網站還是推薦使用unix方式,對於普通小網站來說,無所謂使用哪個都可以,tcp方式反而更容易配置和理解,也是php-fpm.conf中默認的監聽方式。
php-fpm.conf配置中的listen屬性用來配置監聽,這里的配置要和nginx中的一致,使用tcp的就監聽127.0.0.1:9000,使用unix的就設置成/tmp/php-cgi-56.sock。
以下內容摘自官方文檔:
===========
各自媒體平台均可搜索【硬核項目經理】
G. 如何修改 php-fpm的運行用戶
第一種:一個php-fpm主進程
這種方式比較簡單,也只需要一個php-fpm自啟動文件。
首先我們查看一下原php-fpm.conf的這個配置文件,分為兩個部分,一個是global塊,另外一個是自定義的塊,配置文件裡面稱為pool池,默認叫「www」。在global池的上方,有一行注釋了的「include=etc/fpm.d/*.conf」配置項,再通過www池的配置,我們可知可以通過不同的池來配置不同的用戶,來達到多個用戶運行php-fpm的目的,步驟如下:
4、刪除前面的global塊,或者注釋掉。
5、修改[www]為其他,比如你[blog]。
6、配置[blog]池,主要修改兩個地方:
6.1:第一處為運行的用戶和用戶組。
即將
12user = www3group = www4。
修改為
12user=nobody #具體用哪個用戶視自己情況而定,我只做個示例3group=nobody4。
6.2:修改監聽的埠或者socket:
即將:
12listen = 127.0.0.1:90003。
修改為:
12listen = /var/socket/php-fpm/blog.socket #php-fpm需要自己創建,當然也可以直接放在php-fpm目錄下3。
修改成其他埠也是可以的,比如:listen = 127.0.0.1:9001。
7、到主配置文件 php-fpm.conf將「include=…」前面的注釋去掉,讓它去讀取fpm.d目錄下的配置文件。
8、到此第一種方案就修改完畢了,重新啟動測試一下:
12service php-fpm reload3。
第二種:兩個php-fpm主進程。
這種方法需要獨立的配置文件和獨立的自啟動文件:
1、復制一份php-fpm.conf主配置文件。
12cp php-fpm.conf php-fpm-blog.conf3。
2、修改主配置文件。
12vim php-fpm-blog.conf3。
2.1:修改[global]下pid和error_log文件的路徑。
修改 pid=run/php-fpm.pid 為 pid=run/php-fpm-blog.pid 。
修改 error_log = /log/php-fpm.log 為 error_log = /log/php-fpm-blog.log。
2.2:修改池的名稱[www]為[blog],不過這個可以不用修改了,因為這里和原來的進程是獨立的。
2.3:修改用戶和用戶組。
2.4:監聽埠或socket文件。
以上兩部可以按照第一種方案進行修改,這里就不再重復。
3、進入/etc/init.d目錄,復制一份自啟動文件。
12cp php-fpm php-fpm23。
4、修改自啟動文件php-fpm2:
4.1:修改配置文件路徑。
12php_fpm-CONF=${prefix}/etc/php-fpm.conf3。
為
12php_fpm-CONF=${prefix}/etc/php-fpm-blog.conf3。
這個路徑就是剛才的主配置文件。
4.2:修改PID文件路徑:
12php_fpm_PID=${prefix}/var/run/php-fpm.pid3。
為:
12php_fpm_PID=${prefix}/var/run/php-fpm-blog.pid3。
這個路徑要和主配置文件中的pid路徑一致。
5、修改完畢後添加自動啟動。
12chkconfig --add php-fpm23chkconfig --level 2345 php-fpm2 on4。
6、啟動服務。
H. 在編譯 php 時,為了使用 php 內置的 fpm 功能,應該使用什麼參數
php5.3.3以後源碼中已經內嵌了php-fpm,不用象以前的php版本一樣專門打補丁了,只需要在configure的時候添加編譯參數即可。關於php-fpm的編譯參數有–enable-fpm–with-fpm-user=www–with-fpm-group=www–with-libevent-dir=libevent位置。但是,php5.3.3以後的php-fpm不再支持php-fpm以前具有的/usr/local/php/sbin/php-fpm(start|stop|reload)等命令,需要使用信號控制:master進程可以理解以下信號:INT,TERM立刻終止QUIT平滑終止USR1重新打開日誌文件USR2平滑重載所有worker進程並重新載入配置和二進制模塊有了以上信號,php-fpm進程重啟就方便多了。例子:php-fpm關閉:代碼示例:kill-INT`cat/usr/local/php/var/run/php-fpm.pid`php-fpm重啟:代碼示例:kill-USR2`cat/usr/local/php/var/run/php-fpm.pid`說明:cat部分是php-fpm的進程號,可能是我用的5.4的問題。沒有用php-fpm.pid,就沒有這個文件。可以用psaux|grepphp-fpm,使用第一個進程的進程號,測試可行。