pool叫作池子,好比下圖中的www就是一個池子,目前在php-fpm中只定義了這一個pool,其實php-fpm是支持定義多個pool的,每個池子能夠監聽不一樣的socket或者IP+端口,好比nginx有多個站點,那麼每個站點就可使用一個pool,這樣作的好處是,當其中一個php出現502了,502頗有多是php資源不夠了,若是全部的網站使用的是同一個pool,那麼其中一個網站發生了一些故障,好比一些程序員寫的程序有問題,它就會把php資源耗盡,那這樣就會形成一個結果是其餘的站點也會502,全部咱們有必要把每個站點隔離開來,每個站點使用單獨的poolphp
如何寫多個pool呢,php裏面能夠在配置文件中繼續增長poolhtml
一、編輯配置文件java
# vi /usr/local/php-fpm/etc/php-fpm.confios
咱們在配置文件中新增一個池子lijie.comnginx
[lijie.com]
listen = /tmp/lijie.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
#listen.owner = nobody
#listen.group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024程序員
二、檢查語法錯誤apache
# /usr/local/php-fpm/sbin/php-fpm -tvim
三、從新加載php-fpm服務瀏覽器
# /etc/init.d/php-fpm reload服務器
四、查看新增pool是否生效
# ps aux |grep pool //下圖能夠看到pool中已經存在lijie.com了
五、pool的使用
若是想給網站aaa.com配置上面新增的pool,能夠在網站對應的nginx虛擬主機配置文件/usr/local/nginx/conf/vhost/aaa.com.conf中作以下配置:
上面的配置中要求監聽的路徑(socket或者IP)與在php-fpm.conf中配置的pool監聽的路徑一致
配置完成後,就實現了test.com請求的是www這個pool,aaa.com請求的是lijie.com這個pool,這時候假如test.com的請求量很大,把php-fpm的進程耗盡了,最大能夠請求50個,結果當50個已經請求完,這時test.com又有新的請求來的時候,結果就會報502,由於它沒有多餘的php進程再來提供服務了,此時呢 aaa.com這個站點不受影響,由於它用到的pool是另一個
六、include vhost/*.conf
在nginx.conf中咱們支持include vhost/*.conf的寫法來將不一樣虛擬主機的配置文件分開寫在不一樣的文件中,一樣的在php-fpm中也支持這種寫法,這樣寫了後,能夠將不一樣的pool分開寫在不一樣的文件中
首先建立一個目錄用於存放全部的pool
# mkdir /usr/local/php-fpm/etc/php-fpm.d
而後在/usr/local/php-fpm/etc/php-fpm.conf 的[global]中加入如下語句:
include = etc/php-fpm.d/*.conf
同時,將原來的兩個pool分別寫入到兩個新建的文件中,並將這兩個文件放到/usr/local/php-fpm/etc/php-fpm.d/目錄下,
修改後的結果以下:
1)php-fpm.conf中的內容以下:
2)php-fpm.d目錄下的文件有如下兩個:
3)其中www.conf中的內容以下:
4)lijie.conf中的內容以下:
這個慢執行日誌很是有用。建議使用LNMP的緣由之一是咱們能夠分析php-fpm的慢執行日誌。咱們在運維工做中,常常會遇到一個問題,老闆或者客戶反映網站慢了,要想知道網站慢的緣由,先不說java網站,php的網站是有辦法查網站慢在哪裏,像系統負載高,咱們能夠用各類工具,如vmstat、iostat、stop等,就能找到是哪一個進程致使它負載高,而在這裏分析網站慢,是要找出證據證實慢在哪裏的,下面咱們來給LNMP配置慢執行日誌
一、編輯php-fpm的配置文件
# vi /usr/local/php-fpm/etc/php-fpm.d/www.conf
在上面文件中加入如下內容:
request_slowlog_timeout=1 //超過1秒就記錄日誌
slowlog = /usr/local/php-fpm/var/log/www-slow.log //定義日誌存放路徑
二、檢查php-fpm配置文件語法錯誤及從新加載配置文件
# /usr/local/php-fpm/sbin/php-fpm -t
# /etc/init.d/php-fpm reload
三、查看日誌文件是否生成
# ls /usr/local/php-fpm/var/log/
上圖表示日誌文件已經生成
四、查看日誌文件內容
# cat /usr/local/php-fpm/var/log/www-slow.log
能夠看到目前日誌文件中尚未內容
五、模擬慢執行網站的日誌
咱們先來寫一個腳本,www.conf這個pool配置文件是由test.com這個網站使用的,因此咱們在這個網站的目錄/data/wwwroot/test.com/下建立一個腳本文件sleep.php
# vim /data/wwwroot/test.com/sleep.php
在這個腳本文件中加入如下內容:
<?php echo
"test slow log";
sleep(2);
echo "done";
?>
六、測試驗證
訪問test.com/sleep.php,能夠發如今執行的過程當中停頓了一會後,出現了下圖的結果:
# curl -x127.0.0.1:80 test.com/sleep.php
排障技巧:若是上面的訪問出現問題,通常能夠查看錯誤日誌,但咱們也能夠在php.ini配置文件中設置display_error = on,意思是返回錯誤信息給用戶瀏覽器
七、查看慢日誌log
# cat /usr/local/php-fpm/var/log/www-slow.log
上圖能夠看到日誌內容提示網站sleep.php文件的第3行慢,接下來咱們來查看這個文件的第三行內容
# cat /data/wwwroot/test.com/sleep.php
這裏是由於咱們這個文件第三行執行的是休眠2秒,而咱們php-fpm配置文件中設定執行超過1秒則會記錄到日誌中,所以這裏就被記錄下來了,在實際工做中,因爲一些代碼框架的緣由,代碼執行超過1秒的仍是比較多,所以咱們最好將超時時間設置爲2秒
open_basedir 的做用是限制php在指定的目錄裏活動。前面學習的是在php.ini中去定義open_basedir,若是服務器有多個網站,再在php.ini中去定義就不合適了,全部要麼在apache虛擬主機配置文件中定義,要麼在php-fpm配置文件中定義,咱們能夠針對每個池子去配置open_basedir,下面咱們用第二種方式展開
一、編輯test.com網站的pool配置文件
# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
在上面的配置文件中加入如下內容:
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
二、從新加載配置文件
# /usr/local/php-fpm/sbin/php-fpm -t
# /etc/init.d/php-fpm reload
三、測試驗證
# curl -x127.0.0.1:80 test.com/3.php //測試出現以下錯誤
# curl -x127.0.0.1:80 test.com/3.php -I //結果報404
四、查看錯誤日誌
1)首先須要在php.ini配置文件中打開記錄錯誤日誌的開關,下面來編輯配置文件
# vim /usr/local/php-fpm/etc/php.ini
咱們先查找到display_error = Off (正常狀況下是須要將顯示錯誤信息的開關off掉,不能讓別人在瀏覽器看到錯誤信息)
而後查找到log_errors,設置記錄錯誤日誌的值log_errors=on
再查找error_log,設置錯誤日誌的記錄位置error_log=/usr/local/php-fpm/var/log/php_errors.log
還有一個error_report,設置日誌級別爲E_ALL
2)建立錯誤日誌文件的路徑
# touch /usr/local/php-fpm/var/log/php_errors.log
3)再次curl
# curl -x127.0.0.1:80 test.com/3.php //此時執行這條命令後錯誤日誌就會記錄對應的錯誤信息
4)查看錯誤信息
# cat /usr/local/php-fpm/var/log/php_errors.log //錯誤信息以下
上圖錯誤信息提示路徑未知
五、根據錯誤提示修改對應文檔
從上面的提示能夠知道是open_basedir的路徑有問題,咱們來查看www這個pool配置文件
# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
上圖能夠看到咱們路徑確實寫錯誤了,正確的應爲下圖的路徑
六、修改完成後,從新加載配置文件,再來執行命令
# curl -x127.0.0.1:80 test.com/3.php -I //訪問成功 200 OK
php配置文件中有一段內容以下:
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
一、pm = dynamic
這一段用於表示進程以什麼樣的形式啓動,其中dynamic就是動態,動態就是好比我可讓它一開始先啓動20個子進程,若是根據需求,好比後面訪問量大了,自動的生成新的子進程,若是服務器比較閒的話,它還能夠自動去銷燬,當銷燬到必定程度的時候,它就會自動去生成新的子進程。那麼怎麼去控制何時銷燬、何時生成呢?靠的就是下面這些參數來定義的,只有pm = dynamic 時,下面的這些參數纔會生效。
pm.max_children = 50 //最大子進程數
pm.start_servers = 20 //這行表示一開始就生成20個子進程
pm.min_spare_servers = 5 //表示在空閒時最少保留5個子進程
pm.max_spare_servers = 35 //定義在空閒時,子進程的最大數,若是高於這個數,就開始清理空閒的子進程
pm.max_requests = 500 //定義一個子進程最多能夠處理500個請求,當達到這個數值時,子進程會自動退出,若是不退出而子進程又有問題時會發生異常,因此須要殺死這個進程,而因爲有上面的參數,子進程是能夠自動派生的
咱們將lijie.conf配置以下:
從新加載配置文件後,查看進程
# ps aux |grep pool
能夠看到默認啓動的子進程個數爲20個,但最多不會超過50個
二、pm = static
若是不想用pm = dynamic,也可使用pm = static靜態。static表示靜態,若是pm = static,那就只有pm.max_children = 50這行配置生效,這時候啓動的時候就會直接生成50個子進程,咱們如今來按照這種方案配置以下:
小技巧:註釋使用分號「;」來表示
從新加載配置文件後,查看進程
# ps aux |grep pool
上面兩張圖能夠看到有50個www的子進程生成
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
推薦連接
nginx中的root和alias區別 http://blog.csdn.net/21aspnet/article/details/6583335
nginx的alias和root配置 http://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/
http://www.iigrowing.cn/shi-yan-que-ren-nginx-root-alias-location-zhi-ling-shi-yong-fang-fa.html 這個更詳細