12.21 php-fpm的pooljavascript
12.22 php-fpm慢執行日誌(測試時報錯)php
12.23 open_basedircss
12.24 php-fpm進程管理java
12.21 php-fpm的pool:linux
php-fpm裏的pool也叫池子,我們以前加入過www的配置,這個www就叫poolnginx
Nginx能夠設置不一樣的站點,每一個站點均可以設置不一樣的pool。好處是當齊總一個站點502了(資源耗盡了),若是全部的網站都使用了同一個池子,那麼其中一個網站發生了故障,就會把資源耗盡,就會形成其餘的站點502。因此有必要把每個站點隔離開來,每個站點使用單獨的poolvim
設置多個pool的目的是,防止發生502(資源耗盡)。一個pool只能接受50個訪問請求若是再有一個請求會502。另外的pool不受影響瀏覽器
vim /usr/local/php-fpm/etc/php-fpm.d///在[global]部分增長服務器
include = etc/php-fpm.d/*.confapp
mkdir /usr/local/php-fpm/etc/php-fpm.d/
cd /usr/local/php/etc/php-fpm.d/
vim www.conf //內容以下
[www]
listen = /tmp/www.sock //相應的在Nginx的虛擬主機文件裏(php相關的),監聽也選擇爲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
繼續編輯配置文件
vim axin.conf //內容以下
[axin]
listen = /tmp/axin.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
/usr/local/php/sbin/php-fpm –t
/etc/init.d/php-fpm restart
實例:
[root@axinlinux-01 ~]# cd /usr/local/php-fpm/etc/
[root@axinlinux-01 etc]# ls
pear.conf php-fpm.conf php-fpm.conf.default php.ini
[root@axinlinux-01 etc]# cat php-fpm.conf 打開php-fpm的配置文件
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www] 以前定義的www,就是一個pool(池子)
#listen = /tmp/php-fcgi.sock 每一個pool能夠監聽不一樣的sock或者是IP
listen = 127.0.0.1:9000
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@axinlinux-01 etc]# vim php-fpm.conf
[axin.com] 複製以前的【www】。更名字和listen
listen = /tmp/axin.sock
#listen = 127.0.0.1:9000
[root@axinlinux-01 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[19-Aug-2018 22:25:43] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@axinlinux-01 etc]# /etc/init.d/php-fpm reload
Reload service php-fpm done
[root@axinlinux-01 etc]# ps aux |grep php-fpm 會顯示兩個pool,最右側會有咱們設置的axin.com
如今是兩個不一樣的池子,那怎麼去用呢?(如下)
[root@axinlinux-01 etc]# vim /usr/local/nginx/conf/vhost/test.com.conf 去nginx的虛擬主機test.com.conf定義fastcgi_pass爲soch
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
}
[root@axinlinux-01 etc]# cd /usr/local/nginx/conf/vhost/
[root@axinlinux-01 vhost]# vim aaa.com.conf 在去定義aaa.com.conf,加上php的模塊
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/axin.sock; 在這裏改成axin.sock。這樣兩個站點就隔離開了
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
} 這要改成default
這樣兩個站點就隔離開了
那麼,好比test.com.conf([www])比較忙,50個服務已經滿了,可是還有新的進程進來,就會報502。由於沒有多餘的php進程給他提供服務了。而咱們新建的這個aaa.com.conf([axin.com])不受影響,由於他使用的另一個pool。這就是爲何要定義多個pool的緣由
咱們在Nginx主配置文件里加入了 include = etc/php-fpm.d/*.conf,那php-fpm也支持
[root@axinlinux-01 vhost]# cd ..
[root@axinlinux-01 conf]# tail nginx.conf
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
include vhost/*.conf; 在nginx裏咱們加入了include
}
[root@axinlinux-01 conf]# vim /usr/local/php-fpm/etc/php-fpm.conf
在[global]部分增長include = etc/php-fpm.d/*.conf
[root@axinlinux-01 conf]# cat /usr/local/php-fpm/etc/php-fpm.conf 先cat出來
[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]
#listen = /tmp/php-fcgi.sock
listen = 127.0.0.1:9000
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
[axin.com]
listen = /tmp/axin.sock
#listen = 127.0.0.1:9000
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@axinlinux-01 conf]# vim /usr/local/php-fpm/etc/php-fpm.conf 刪除[www]和[axin.com](100dd)
[root@axinlinux-01 etc]# cd /usr/local/php-fpm/etc/ 進入到etc下
[root@axinlinux-01 etc]# mkdir php-fpm.d 由於include路徑爲php-fpm.d的目錄下,多以要建立php-fpm.d的目錄
[root@axinlinux-01 etc]# cd php-fpm.d/ 進入到php-fpm.d目錄下
[root@axinlinux-01 php-fpm.d]# vim www.conf vim www.cong,把剛纔cat的php-fpm的配置文件裏的[www]的部分拷貝進來
[root@axinlinux-01 php-fpm.d]# vim axin.conf vim axin.conf,把剛纔cat的php-fpm的配置文件裏的[axin.conf]的部分拷貝進來
[root@axinlinux-01 php-fpm.d]# ls 這樣看着就很乾淨了,相似於nginx的vhosts
axin.conf www.conf
[root@axinlinux-01 vhost]# /usr/local/php-fpm/sbin/php-fpm -t
[20-Aug-2018 16:02:25] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
!!阿鑫作到這有報錯,拍錯是vim兩個.conf文件的時候,沒有檢查是否複製徹底
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12.22 php-fpm慢執行日誌:(很是有用)
作php的網站建議使用LNMP,由於咱們能夠分析php的慢執行日誌。由於在運維中,常常會遇到公司的網站訪問慢了,能找到到底什麼地方慢了,因此慢執行日誌很是重要。像系統負載高咱們能夠用vmstat或top卡那個進程致使的。那php網站
~1. vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//好比針對[www]。加入以下內容
request_slowlog_timeout = 1 超過一秒鐘記錄日誌
slowlog = /usr/local/php-fpm/var/log/www-slow.log 記錄的日誌放在這個路徑下
~2.配置nginx的虛擬主機test.com.conf,把unix:/tmp/php-fcgi.sock改成unix:/tmp/www.sock (這一步阿明並無作,阿鑫作了報502,不作報404)
~3.從新加載nginx服務
~4.vim /data/wwwroot/test.com/sleep.php//寫入以下內容(模擬慢執行的腳本)
<?php echo 「test slow log」;sleep(2);echo 「done」;?> 爲作測試,休眠2秒鐘
~5.curl -x127.0.0.1:80 test.com/sleep.php
~6.cat /usr/local/php-fpm/var/log/www-slow.log 這個文件下就是咱們設置的慢日誌
~~因此php通常執行時間介於1秒到兩秒之間
實例:
[root@axinlinux-01 ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
[www]
listen = /tmp/www.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
request_slowlog_timeout = 1 在最下面加入這兩行
slowlog = /usr/local/php-fpm/var/log/www-slow.log
[root@axinlinux-01 ~]# /usr/local/php-fpm/sbin/php-fpm -t 測試有無語法錯誤
[20-Aug-2018 16:28:09] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@axinlinux-01 ~]# ls /usr/local/php-fpm/var/log/ 檢測路徑下的慢日誌文件是否被建立
php-fpm.log www-slow.log 對應咱們加入的路徑的慢日誌文件
[root@axinlinux-01 ~]# cat /usr/local/nginx/conf/vhost/test.com.conf [www]被test所使用,因此咱們看一下他的路徑。好測試他的休眠時間
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name; 在這個路徑下
}
[root@axinlinux-01 ~]# vim /data/wwwroot/test.com/sleep.php 在查到的這個路徑下建立寫試用的休眠php文件
<?php
echo 「test slow log」;
sleep(2);
echo 「done」;
?>
!!此處有個知識點:
有錯誤的話,有個簡單的方式。打開它的配置文件:
[root@axinlinux-01 php-fpm.d]# vim /usr/local/php-fpm/etc/php.ini
搜索diapaly_errors,將=Off改成=On
display_errors = On
[root@axinlinux-01 php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm done
在從新curlhi顯示哪裏錯了
!!!正常生產換件是爲Off的,由於不能再瀏覽器上顯示錯誤日誌,要把它放在服務器上的一個文件裏!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12.23 open_basedir:
以前講過在php.ini裏面定義open_basedir。若是服務器上有多個網站,那麼在php.ini裏面定義就不合適了,由於open_basedir的做用是限定php在指定的目錄裏活動。因此要麼在Apache虛擬主機配置文件裏定義,要麼在php-fpm的配置文件裏定義。那麼咱們能夠針對每一個池子定義不一樣的open_basedir:
~1. vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入以下內容
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
([www]這個池子,是test.com.conf在用着,因此要寫test.com)
~2.建立測試php腳本,進行測試
~3.再次更改aming.conf,修改路徑,再次測試
~4.配置錯誤日誌
~5.再次測試
~6.查看錯誤日誌
把open_basedir的錯誤日誌定義上
~1.display_errors = Off (改成Off)成產中爲Off,不能再瀏覽器上顯示錯誤日誌。要在服務器的一個文件裏顯示
~2.在搜索error_log
在;error_log = syslog 這一行下面寫error_log = /usr/local/php-fpm/var/log/php_errors.log
也就是定義錯誤日誌的路徑。完成後要看一下日誌是否生成。沒有的話就要touch一個並chmod(防止他不能正常的寫入)
[root@axinlinux-01 log]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@axinlinux-01 log]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log
~3.在搜索error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT在這一行用分號註釋掉。在下面加上:
error_reporting =E_ALL (也就是日誌級別,爲全部)
最後要重啓
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12.24 php-fpm進程管理:
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf:
[www]
listen = /tmp/www.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
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
~1. pm = dynamic //動態進程管理,也能夠是static(以什麼樣的形式啓動)(以分號註釋)
好比結合下面的,一開始先啓動幾個,而後根據需求,好比訪問量很大的時候自動的生成新的子進程。假如服務器比較閒的話(也就是說沒用到他的時候),還能夠自動的去銷燬,當銷燬到必定程度的時候還能夠自動的生成一些新的。就是由這些參數來控制何時生成與銷燬
pm = static //也能夠改爲靜態的,就是一會兒生成這麼多。可是改成static那麼只有pm.max_children = 50這一行生效了,一下的都沒有了(ps aux |grep php能夠查看)
~2.pm.max_children = 50 //最大子進程數,ps aux能夠查看
~3.pm.start_servers = 20 //啓動服務時會啓動的進程數
~4.pm.min_spare_servers = 5 //定義在空閒時段,子進程數的最少數量,若是達到這個數值時,php-fpm服務會自動派生新的子進程。
~5.pm.max_spare_servers = 35 //定義在空閒時段,子進程數的最大值,若是高於這個數值就開始清理空閒的子進程。(定義的是何時去銷燬)
~6.pm.max_requests = 500 //定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多能夠處理這麼多請求,當達到這個數值時,它會自動退出。