LNMP架構(六)

一 php-fpm的pool

    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中的內容以下:

 

二 php-fpm慢執行日誌

    這個慢執行日誌很是有用。建議使用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

    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-fpm進程管理

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 這個更詳細

相關文章
相關標籤/搜索