1. 程式人生 > >十三周一次課

十三周一次課

linux

十三周一次課

12.21php-fpm的pool

12.22php-fpm的慢執行日誌

12.23open_basedir

12.24php-fpm進程管理

12.21php-fpm的pool

php-fpm的pool目錄概要

  • vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加

  • include = etc/php-fpm.d/*.conf

  • mkdir /usr/local/php/etc/php-fpm.d/

  • cd /usr/local/php/etc/php-fpm.d/

  • vim 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

  • 繼續編輯配置文件

  • vim aming.conf //內容如下

[aming]
listen = /tmp/aming.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

php-fpm的pool

1.php-fpm有一個概念,叫做pool。 使用ps aux |grep php-fpm最右側看到的那一列就是pool,也就是它的池子

[root@tianqi-01 vhost]# ps aux |grep php-fpm
root 1056 0.0 0.4 227204 4952 ? Ss 08:39 0:01 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 1057 0.0 0.4 227204 4716 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1058 0.0 0.4 227204 4716 ? S 08:39 0:00 php-fpm: pool www

php-fpm 1059 0.0 0.4 227204 4716 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1060 0.0 0.4 227204 4716 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1061 0.0 0.4 227204 4720 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1062 0.0 0.4 227204 4720 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1063 0.0 0.4 227204 4720 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1064 0.0 0.4 227204 4720 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1065 0.0 0.4 227204 4720 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1066 0.0 0.4 227204 4720 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1067 0.0 0.4 227204 4720 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1068 0.0 0.4 227204 4720 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1069 0.0 0.4 227204 4724 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1070 0.0 0.4 227204 4724 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1071 0.0 0.4 227204 4724 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1072 0.0 0.4 227204 4724 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1073 0.0 0.4 227204 4724 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1074 0.0 0.4 227204 4724 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1075 0.0 0.4 227204 4724 ? S 08:39 0:00 php-fpm: pool www
php-fpm 1076 0.0 0.4 227204 4724 ? S 08:39 0:00 php-fpm: pool www
root 5360 0.0 0.0 112664 980 pts/0 S+ 21:50 0:00 grep --color=auto php-fpm
[root@tianqi-01 vhost]#

2.切換目錄,會看到我們只定義了一個www的pool

[root@tianqi-01 vhost]# cd /usr/local/php-fpm/etc/
[root@tianqi-01 etc]# ls

pear.conf php-fpm.conf php-fpm.conf.default php.ini
[root@tianqi-01 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
[www] //這裏只定義了一個www的pool
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
[root@tianqi-01 etc]#

3.其實是支持定義多個池子的,每一個池子都可以監聽不同的sock或者TCP/IP,nginx如果有多個站點,那麽每個站點都能去使用一個獨立的pool。這樣做的優勢就是,當其中一個php發生502了(502很有可能是php資源不夠了),如果所有的網站使用了同一個池子,那其中一個網站發生了故障(比如寫的程序有問題),那麽就會把你的php資源耗盡,這樣就會造成其他的站點也會502,所以有必要把每一個站點隔離開來,每一個站點使用獨立的pool。

4.設置多個pool

方法一

  • 在/usr/local/php-fpm/etc/php-fpm裏面,繼續增加pool

    • 寫第二個pool,名稱為tianqi.com,listen = /tmp/tianqi.sock

    • 配置中的其他信息可根據自己的需求來配置

[root@tianqi-01 etc]# vim !$
vim 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
[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
[tianqi.com]
listen = /tmp/tianqi.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

保存退出

5.檢查是否存在語法錯誤

[root@tianqi-01 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[16-Mar-2018 21:58:38] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@tianqi-01 etc]#

6.若沒有語法錯誤,做一個php-fpm重啟

  • /etc/init.d/php-fpm restart 或使用 /etc/init.d/php-fpm reload

[root@tianqi-01 etc]# /etc/init.d/php-fpm reload
Reload service php-fpm done
[root@tianqi-01 etc]#

7.這裏再來ps查看,會看到最右側多了一個tianqi.com,這個就是兩個不同的池子

[root@tianqi-01 etc]# ps aux |grep php-fpm
root 5389 0.2 0.4 227264 4976 ? Ss 21:59 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 5390 0.0 0.4 227204 4712 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5391 0.0 0.4 227204 4712 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5392 0.0 0.4 227204 4712 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5393 0.0 0.4 227204 4712 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5394 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5395 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5396 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5397 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5398 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5399 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5400 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5401 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5402 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5403 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5404 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5405 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5406 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5407 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5408 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5409 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool www
php-fpm 5410 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5411 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5412 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5413 0.0 0.4 227204 4716 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5414 0.0 0.4 227204 4720 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5415 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5416 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5417 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5418 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5419 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5420 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5421 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5422 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5423 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5424 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5425 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5426 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5427 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5428 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
php-fpm 5429 0.0 0.4 227204 4724 ? S 21:59 0:00 php-fpm: pool tianqi.com
root 5447 0.0 0.0 112660 984 pts/0 R+ 22:02 0:00 grep --color=auto php-fpm
[root@tianqi-01 etc]#

8.在nginx中使用新的pool

[root@tianqi-01 conf]# cd /usr/local/nginx/conf/vhost
[root@tianqi-01 vhost]# ls

aaa.com.conf load.conf proxy.conf ssl.conf test.com.conf
[root@tianqi-01 vhost]#

9.可以把test.com.conf定義成fastcgi_pass unix:/tmp/php-fcgi.sock;

  • 這是www池子中的php-fcgi.sock

[root@tianqi-01 vhost]# vim test.com.conf

server
{
listen 80;
server_name test.com test2.com test3.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
if ($host != 'test.com' ) {
rewrite ^/(.*)$ http://test.com/$1 permanent;
}

# location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
# {
# expires 7d;
# access_log off;
# }
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
{
expires 7d;
valid_referers none blocked server_names *.test.com ;
if ($invalid_referer) {
return 403;
}
access_log off;
}

location ~ .*\.(js|css)$
{
# expires 12h;
access_log off;
}
location /admin/
{
allow 127.0.0.1;
allow 192.168.11.136;
deny all;
}

location ~ .*(upload|image)/.*\.php$
{
deny all;
}
if ($http_user_agent ~* 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}

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;
}

access_log /tmp/test.com.log combined_realip;
}
10.再把另一個aaa.com.conf中 fastcgi_pass unix:/tmp/tianqi.sock;

  • 這是tianqi.com池子中的tianqi.sock

  • 路徑/data/wwwroot/default$fastcgi_script_name;

[root@tianqi-01 vhost]# vim aaa.com.conf

server
{
listen 80 default_server;
server_name aaa.com;
index index.html index.htm index.php;
root /data/wwwroot/default;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/tianqi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
}
}

保存退出

11.這樣這兩個站點就隔離開了

12.假設現在test.com請求量很大,最終將進程耗盡了,比如php-fpm耗盡了,這時候又有其他請求來了,就會報502,因為沒有多余的php給進程提供服務了,而另一個站點則不受影響,因為使用的是另一個池子,另一個pool,這就是定義多個池子的原因

方法二

1.在vhost目錄下是多個.conf文件,在nginx.conf裏面加了一條 include vhost/*.conf;

[root@tianqi-01 vhost]# ls
aaa.com.conf load.conf proxy.conf ssl.conf test.com.conf
[root@tianqi-01 vhost]# tail ../nginx.conf
tcp_nodelay on;
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;
}
[root@tianqi-01 vhost]#

2.在php-fpm同樣是支持 include vhost/*.conf;

3.在主配置文件php-fpm中的 [global] 加入include = etc/php-fpm.d/*.conf ,並將池子拆分出來,將其中的池子pool刪除

  • 快速刪除內容方法,100dd就會給刪除

[root@tianqi-01 vhost]# cd /usr/local/php-fpm/etc/
[root@tianqi-01 etc]# ls

pear.conf php-fpm.conf php-fpm.conf.default php.ini
[root@tianqi-01 etc]# vim 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 //添加一條語句,刪除下面的語句

保存退出

4.因為include = etc/php-fpm.d/,所以需要創建/php-fpm.d/的目錄

[root@tianqi-01 etc]# mkdir php-fpm.d
[root@tianqi-01 etc]#

5.切換路徑,並創建www.conf,然後將之前php-fpm.conf中的www部分寫入到其中

[root@tianqi-01 etc]# cd !$
cd php-fpm.d
[root@tianqi-01 php-fpm.d]# vim 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

保存退出

6.然後再創建tianqi.conf

[root@tianqi-01 php-fpm.d]# vim tianqi.conf

[tianqi.com]
listen = /tmp/tianqi.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

7.這樣看著就會很幹凈,類似於nginx的vhost

8.檢查是否有錯誤

[root@tianqi-01 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[16-Mar-2018 22:24:33] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@tianqi-01 php-fpm.d]#

9.然後重啟查看

[root@tianqi-01 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@tianqi-01 php-fpm.d]# !ps
ps aux |grep php-fpm

root 5511 2.0 0.4 227292 4984 ? Ss 22:25 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 5512 0.0 0.4 227232 4720 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5513 0.0 0.4 227232 4720 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5514 0.0 0.4 227232 4720 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5515 0.0 0.4 227232 4720 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5516 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5517 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5518 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5519 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5520 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5521 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5522 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5523 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5524 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5525 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5526 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5527 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5528 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5529 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5530 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5531 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool tianqi.com
php-fpm 5532 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5533 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5534 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5535 0.0 0.4 227232 4724 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5536 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5537 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5538 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5539 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5540 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5541 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5542 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5543 0.0 0.4 227232 4728 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5544 0.0 0.4 227232 4732 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5545 0.0 0.4 227232 4732 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5546 0.0 0.4 227232 4732 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5547 0.0 0.4 227232 4732 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5548 0.0 0.4 227232 4732 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5549 0.0 0.4 227232 4732 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5550 0.0 0.4 227232 4732 ? S 22:25 0:00 php-fpm: pool www
php-fpm 5551 0.4 0.4 227232 4732 ? S 22:25 0:00 php-fpm: pool www
root 5553 0.0 0.0 112660 980 pts/0 S+ 22:25 0:00 grep --color=auto php-fpm
[root@tianqi-01 php-fpm.d]#

10.這就是多個池子的配置方法

12.22php-fpm的慢執行日誌(非常有用)

php-fpm慢執行日誌目錄概要

  • vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下內容

request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log

  • 配置nginx的虛擬主機test.com.conf,把unix:/tmp/php-fcgi.sock改為unix:/tmp/www.sock

  • 重新加載nginx服務

  • vim /data/wwwroot/test.com/sleep.php//寫入如下內容

<?php 
echo “test slow log”;
sleep(2);echo “done”;
?>

  • curl -x127.0.0.1:80 test.com/sleep.php

  • cat /usr/local/php-fpm/var/log/www-slow.log

php-fpm慢執行日誌

  • 在做php網站的時候,建議使用LNMP,因為我們可以分析php的慢執行日誌

  • 查詢方法:

  • 1.系統負載高,可以通過各種工具查,查出是哪個進程導致

  • 2.PHP網站訪問慢,通過查看慢執行日誌

1.配置www.conf 在配置文件中加入

request_slowlog_timeout = 1 //超過一秒鐘就要記錄日誌

slowlog = /usr/local/php-fpm/var/log/www-slow.log //日誌放到該路徑下

[root@tianqi-01 php-fpm.d]# vim 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
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log

保存退出

2.查看語法錯誤,並重新加載

[root@tianqi-01 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[16-Mar-2018 22:34:21] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@tianqi-01 php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm done
[root@tianqi-01 php-fpm.d]#

3.修改虛擬主機配置文件

[root@dl-001 etc]# vim /usr/local/nginx/conf/vhost/test.com.conf
# 修改sock文件
fastcgi_pass unix:/tmp/www.sock;
...

  • 1

  • 2

  • 3

  • 4

4.重啟nginx服務

[root@dl-001 etc]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@dl-001 etc]# /usr/local/nginx/sbin/nginx -s reload

  • 1

  • 2

  • 3

  • 4

5.設置測試php文件

[root@dl-001 etc]# vim /data/www/test.com/sleep.php 
<?php
echo "test slow log";
sleep(2);
echo "done";
?>

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

說明:要查看具體的錯誤信息,可以開啟php.ini內的display_error參數

6.查看慢執行日誌

[root@dl-001 etc]# cat /usr/local/php-fpm/var/log/www-slow.log 

[05-Jan-2018 21:13:15]  [pool www] pid 3430
script_filename = /data/www/test.com/sleep.php
[0x00007f616ec772d8] sleep() /data/www/test.com/sleep.php:3


12.23open_basedir

open_basedir 的作用是限制php在指定的目錄裏活動。

相關配置代碼

[root@dl-001 etc]# vim /usr/local/php-fpm/etc/php-fpm.d/test.conf 
# 添加如下代碼
php_admin_value[open_basedir]=/data/www/test.com:/tmp/

  • 1

  • 2

  • 3

效果測試

先測試錯誤配置時php腳本的效果

[root@dl-001 etc]# vim /usr/local/php-fpm/etc/php-fpm.d/test.conf 
# 將添加的代碼內站點錯誤書寫為aaa.com
php_admin_value[open_basedir]=/data/www/aaa.com:/tmp/

  • 1

  • 2

  • 3

重啟php-fpm服務

[root@dl-001 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 18:35:50] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@dl-001 etc]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

使用curl測試網頁訪問

# 由於已經設置了open_basedir,網頁無法訪問
[root@dl-001 etc]# curl -x 127.0.0.1:80 test.com/test.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.12.2
Date: Tue, 09 Jan 2018 10:38:45 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

修改正確後驗證

[root@dl-001 etc]# vim /usr/local/php-fpm/etc/php-fpm.d/test.conf 
# 將添加的代碼錯誤書寫為
php_admin_value[open_basedir]=/data/www/test.com:/tmp/

  • 1

  • 2

  • 3

重啟服務並驗證

[root@dl-001 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 18:39:10] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@dl-001 etc]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done

# 成功訪問
[root@dl-001 etc]# curl -x 127.0.0.1:80 test.com/test.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 09 Jan 2018 10:39:20 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

php錯誤日誌設置

修復php.ini配置文件,關閉display_errors參數

# 不在瀏覽器上顯示錯誤信息
display_errors = Off

# 開啟錯誤日誌記錄
log_errors = On
# 設置存放路徑
error_log = /usr/local/php-fpm/var/log/php_errors.log
# 設置錯誤記錄級別
error_reporting = E_ALL

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

為了防止錯誤日誌無法創建並修改,最好先行創建並給予權限。

[root@dl-001 etc]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@dl-001 etc]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log

  • 1

  • 2

為了產生錯誤信息,先故意寫錯php代碼

[root@dl-001 etc]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@dl-001 etc]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log 
php_admin_value[open_basedir]=/data/www/aaa.com:/tmp/

  • 1

  • 2

  • 3

訪問網頁,其錯誤信息如下

[root@dl-001 etc]# curl -x 127.0.0.1:80 test.com/test.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.12.2
Date: Tue, 09 Jan 2018 10:52:01 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

# 這裏明確指出所要訪問的網頁不在aaa.com站點
[root@dl-001 etc]# cat /usr/local/php-fpm/var/log/php_errors.log 
[09-Jan-2018 10:52:01 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/www/test.com/test.php) is not within the allowed path(s): (/data/www/aaa.com:/tmp/) in Unknown on line 0
[09-Jan-2018 10:52:01 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

修改正確後再查看日誌(php文件已被解析)

[root@dl-001 etc]# cat /usr/local/php-fpm/var/log/php_errors.log 
...
[09-Jan-2018 10:53:18 UTC] PHP Warning:  phpinfo(): It is not safe to rely on the syst

12.24php-fpm進程管理

進程管理

# 動態進程管理
pm = dynamic

# 靜態進程管理
# 設置了靜態進程管理的配置項只有緊跟該行的那項配置生效
pm = static

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

最大子進程數

# 可以使用ps aux進行查看
pm.max_children = 50

  • 1

  • 2

設置啟動時開啟的PHP進程數

# 值可以根據需要進行修改
pm.start_servers = 20

  • 1

  • 2

在空閑時段,子進程數的最小值

# 如果達到這個數值,php-fpm服務會自動派生新的子進程
pm.min_spare_servers = 5

  • 1

  • 2

定義在空閑時段,子進程數的最大值

# 如果高於這個數值,就開始清理空閑的子進程
pm.max_spare_servers = 35

  • 1

  • 2

定義一個子進程最多處理的請求數

# 對於該項而言,超出該值的話進程會因此而退出
pm.max_requests = 500

  • 1

  • 2

說明:們需要根據實際應用時的需要對上述參數的值進行配置,配置後重啟php-fpm服務使其生效即可。


十三周一次課