12-3 12 php-fpm pool 慢日誌 open_basedir 進程

12.21 php-fpm的poolphp

12.22 php-fpm慢執行日誌html

12.23 open_basedirnginx

12.24 php-fpm進程管理apache

12.21 php-fpm的pool

nginx能夠定義多個虛擬主機的conf,一樣的,php-fpm能夠定義多個資源池子pool,用不一樣的socket監聽,兩個pool互不影響,相互隔離vim

方法一:主配置文件增長,複製原有並修改便可瀏覽器

方法二:建立多個pool文件,放到下級目錄curl

第一步:轉移原有[www]pool並建立[axiang]poolsocket

[root@axiang-02 ~]# cd /usr/local/php-fpm/etc
[root@axiang-02 etc]# vim php-fpm.conf  //打開用於複製粘貼,[crtl-z]放後臺
[root@axiang-02 etc]# vim php-fpm.d/axiang.conf 
[root@axiang-02 etc]# cat !$
cat php-fpm.d/axiang.conf
[axiang]
listen = /tmp/axiang.sock
listen.mode = 666
user = php-fpm
group = php-fpm
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

[root@axiang-02 etc]# vim php-fpm.d/www.conf 
[root@axiang-02 etc]# cat !$
cat php-fpm.d/www.conf
[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php-fpm
group = php-fpm
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
[root@axiang-02 etc]# cat php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf   //先複製粘貼好[www]的參數到新文件,最後刪掉並改成include

第二步:經過axiang.sock,將nginx虛擬主機bbb.com的php請求,對接到php-fpm服務的[axiang]poolphp-fpm

[root@axiang-02 vhost]# cat bbb.conf 
server
{
    listen 80 default_server;
    server_name bbb.com;
    index index.html index.htm index.php;
    root /data/wwwroot/bbb.com;
    #匹配php,調用php-fpm的服務
    location ~ \.php$   
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/axiang.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/bbb.com$fastcgi_script_name;
    }
}

試用axiang.sock測試

12.22 php-fpm慢執行日誌

當網站訪問變慢了,分析php網站瓶頸,慢在哪裏,slow-log很是好用。是nginx的看家本領

選擇nginx的aaa網站測試

[root@axiang-02 php-fpm]# cd /usr/local/nginx/conf/vhost/
[root@axiang-02 vhost]# cat aaa.conf

看到aaa.com網站在使用[www]pool

建立慢日誌

[root@axiang-02 vhost]# cd /usr/local/php-fpm/
[root@axiang-02 php-fpm]# vim etc/php-fpm.d/www.conf 
加入:
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log

在www池裏加入下面兩行,表示訪問過程大於1秒則記錄日誌到哪裏

[root@axiang-02 php-fpm]# sbin/php-fpm -t
[root@axiang-02 php-fpm]# /etc/init.d/php-fpm reload
[root@axiang-02 php-fpm]# ls /usr/local/php-fpm/var/log/www-slow.log
/usr/local/php-fpm/var/log/www-slow.log    //重啓便可生成慢日誌文件了,尚未內容

測試

[root@axiang-02 vhost]# vim /data/wwwroot/aaa.com/slow.php
[root@axiang-02 vhost]# cat !$ 
 <?php echo 「test slow log」;sleep(2);echo 「done「;?>  //sleep命令能夠拖時間
[root@axiang-02 vhost]# curl -x127.0.0.1:80 aaa.com/slow.php
[root@axiang-02 vhost]# curl -x127.0.0.1:80 aaa.com/slow.php -I
HTTP/1.1 500 Internal Server Error  //慢日誌不會報錯,這裏是別的問題

頁面展現錯誤信息

慢日誌並不會報錯,打開php.ini的display_errors,就能夠經過瀏覽器訪問或curl看到問題在哪裏

[root@axiang-02 vhost]# vi /usr/local/php-fpm/etc/php.ini

[root@axiang-02 vhost]# /etc/init.d/php-fpm reload
[root@axiang-02 vhost]# curl -x127.0.0.1:80 aaa.com/slow.php
<b>Parse error</b>:  syntax error, unexpected 'slow' (T_STRING), expecting ',' or ';' in <b>/data/wwwroot/aaa.com/slow.php</b> on line <b>2</b><br />看到是標點符號問題
[root@axiang-02 vhost]# vi /data/wwwroot/aaa.com/slow.php  //修改好
[root@axiang-02 vhost]# curl -x127.0.0.1:80 aaa.com/slow.php
test slow logdone[root@axiang-02 vhost]#     //慢php執行成功
[root@axiang-02 vhost]# cat /usr/local/php-fpm/var/log/www-slow.log    //查看慢日誌
[09-Aug-2017 21:22:11]  [pool www] pid 2843
script_filename = /data/wwwroot/aaa.com/slow.php
[0x00007f1b483892d0] sleep() /data/wwwroot/aaa.com/slow.php:3  //會告訴你第三行的sleep執行慢了
  • 雖然監聽的是127.0.0.1:9000端口,curl -x192.168.83.138:80 aaa.com/slow.php命令依然能夠生成慢日誌,說明監聽的ip及端口只是php與nginx通訊的橋樑,與curl訪問的ip及端口沒有關係

12.23 open_basedir

能夠在pool中指定,與apache的相似,用於限定pool服務的根目錄範圍。能夠定義多個,用冒號分開

pool中加入

php_admin_value[open_basedir]=/data/wwwroot/aaa.com:/tmp/

curl訪問沒有問題

[root@axiang-02 php-fpm]# curl -x192.168.83.138:80 aaa.com/slow.php
test slow logdone

錯誤日誌

關掉display_error(通常也不會讓瀏覽器展現錯誤信息,注意用";"註釋,不然會提示)

開啓錯誤日誌

error_log 定義日誌路徑

error_reporting 定義日誌記錄範圍

[root@axiang-02 php-fpm]# grep error_log /usr/local/php-fpm/etc/php.ini  //檢查錯誤日誌路徑
error_log = /usr/local/php-fpm/var/log/php_errors.log
[root@axiang-02 php-fpm]# ls /usr/local/php-fpm/var/log/
php-fpm.log  www-slow.log
[root@axiang-02 php-fpm]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@axiang-02 php-fpm]# chmod 777 !$
chmod 777 /usr/local/php-fpm/var/log/php_errors.log  //手動作出錯誤日誌,給權限
[root@axiang-02 php-fpm]# sbin/php-fpm -t
[root@axiang-02 php-fpm]# /etc/init.d/php-fpm restart

測試,將open_basedir的路徑改錯

[root@axiang-02 php-fpm]# !curl   //測試
curl -x192.168.83.138:80 aaa.com/slow.php
No input file specified.
[root@axiang-02 php-fpm]# curl -x192.168.83.138:80 aaa.com/slow.php -I
HTTP/1.1 404 Not Found

[root@axiang-02 php-fpm]# tail /usr/local/php-fpm/var/log/php_errors.log 
[09-Aug-2017 14:18:07 UTC] PHP Deprecated:  Comments starting with '#' are deprecated in Unknown on line 1 in Unknown on line 0  //要用分號 ; 註釋

[09-Aug-2017 14:18:28 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/aaa.com/slow.php) is not within the allowed path(s): (/data/wwwroot/abaa.com:/tmp/) in Unknown on line 0
[09-Aug-2017 14:18:28 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0
  • pool的open_basedir的做用是限定pool服務的網站根目錄,並不限定網站。若是aaa.com與bbb.com都是用的/data/www/aaa.com則沒問題。
  • apache的open_basedir,在虛擬主機配置中設置(extra/httpd-vhost)
  • pool的open_basedir參數寫錯會致使整站沒法訪問

12.24 php-fpm進程管理

pool的參數詳解

[root@axiang-02 php-fpm]# cat etc/php-fpm.d/axiang.conf 
···
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
[root@axiang-02 php-fpm]# vim etc/php-fpm.d/axiang.conf

[root@axiang-02 php-fpm]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[root@axiang-02 php-fpm]# ps aux |grep php-fpm
root  2647  0.0  0.2 226680  5004 ?Ss   14:59   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm   2648  0.0  0.2 226620  4720 ?S14:59   0:00 php-fpm: pool axiang
php-fpm   2649  0.0  0.2 226620  4720 ?S14:59   0:00 php-fpm: pool axiang
php-fpm   2650  0.0  0.2 226620  4720 ?S14:59   0:00 php-fpm: pool axiang
php-fpm   2651  0.0  0.2 226620  4720 ?S14:59   0:00 php-fpm: pool axiang
php-fpm   2652  0.0  0.2 226620  4724 ?S14:59   0:00 php-fpm: pool axiang
php-fpm   2653  0.0  0.2 226620  4724 ?S14:59   0:00 php-fpm: pool axiang
php-fpm   2654  0.0  0.2 226620  4724 ?S14:59   0:00 php-fpm: pool axiang
php-fpm   2655  0.0  0.2 226620  4724 ?S14:59   0:00 php-fpm: pool axiang
php-fpm   2656  0.0  0.2 226668  4720 ?S14:59   0:00 php-fpm: pool www
php-fpm   2657  0.0  0.2 226668  4720 ?S14:59   0:00 php-fpm: pool www
···

  • pm

    • dynamic 動態資源資源模式,根據使用狀況自動調整,參數建議如上圖
    • static 會直接生成最大進程數:pm.max_childen,spare參數不生效
  • pm.max_children //最大子進程數,能夠查看,static模式會保持最大進程數

  • pm.start_servers //啓動服務時會啓動的進程數,根據服務狀態進行調整

  • pm.min_spare_servers //定義在空閒時段,子進程數的最少數量,requests到達max會kill該children進程。殺超了min_spare線會派生新children

  • pm.max_spare_servers //定義在空閒時段,子進程數的最大值,若是高於這個數值就開始清理空閒的子進程。

  • pm.max_requests //定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多能夠處理這麼多請求,當達到這個數值時,它會自動退出。

    • 聽說由於php處理進程爲輪詢,設置requests太低容易同時max,致使網站502沒法訪問,因此建議request調大
相關文章
相關標籤/搜索