12.21 php-fpm的poolphp
12.22 php-fpm慢執行日誌html
12.23 open_basedirnginx
12.24 php-fpm進程管理apache
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測試
當網站訪問變慢了,分析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執行慢了
能夠在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的參數詳解
[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
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的子進程最多能夠處理這麼多請求,當達到這個數值時,它會自動退出。