Linux基礎(day53)

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

12.21 php-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@hanfeng ~]# ps aux |grep php-fpm
root      2280  0.0  0.4 227776  4952 ?        Ss   18:29   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm   2281  0.0  0.4 227776  4708 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2282  0.0  0.4 227776  4708 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2283  0.0  0.4 227776  4708 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2284  0.0  0.4 227776  4708 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2285  0.0  0.4 227776  4712 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2286  0.0  0.4 227776  4712 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2287  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2288  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2289  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2290  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2291  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2292  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2293  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2294  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2295  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2296  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2297  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2298  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2299  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
php-fpm   2300  0.0  0.4 227776  4716 ?        S    18:29   0:00 php-fpm: pool www
root      7644  0.0  0.0 112680   984 pts/0    S+   21:38   0:00 grep --color=auto php-fpm
[root@hanfeng ~]# 
  1. 切換目錄,會看到我們只定義了一個www的pool
[root@hanfeng ~]# cd /usr/local/php-fpm/etc/
[root@hanfeng etc]# ls
pear.conf  php-fpm.conf  php-fpm.conf.default  php.ini
[root@hanfeng 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]
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@hanfeng etc]#
  1. 其實是支持定義多個池子的,每一個池子都可以監聽不同的sock或者TCP/IP,nginx如果有多個站點,那么每個站點都能去使用一個獨立的pool,這樣做的優勢就是,當其中一個php發生502了(502很有可能是資源不夠了),如果所有的網站使用了同一個池子,那其中一個網站發生了故障(比如寫的程序有問題),那么就會把你的php資源耗盡,這樣就會造成其他的站點也會502,所以有必要把每一個站點隔離開來,每一個站點使用獨立的pool
  2. 設置多個pool,方法一
  • 在/usr/local/php-fpm/etc/php-fpm里面,繼續增加pool
    • 寫第二個pool,名稱為hanfeng.com,listen = /tmp/hanfeng.sock
    • 配置中的其他信息可根據自己的需求來配置
[root@hanfeng etc]# vi /usr/local/php-fpm/etc/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.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[hanfeng.com]
listen = /tmp/hanfeng.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保存退出
  1. 檢查是否存在語法錯誤
[root@hanfeng etc]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 23:28:58] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@hanfeng etc]# 
  1. 若沒有語法錯誤,做一個php-fpm重啟
    • /etc/init.d/php-fpm restart 或使用 /etc/init.d/php-fpm reload
[root@hanfeng etc]# /etc/init.d/php-fpm reload
Reload service php-fpm  done
[root@hanfeng etc]# 
  1. 這里再來ps查看,會看到最右側多了一個hanfeng.com,這個就是兩個不同的池子
[root@hanfeng etc]# ps aux |grep php-fpm
root      7731  0.0  0.4 227836  4964 ?        Ss   22:32   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm   7732  0.0  0.4 227776  4708 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7733  0.0  0.4 227776  4708 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7734  0.0  0.4 227776  4708 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7735  0.0  0.4 227776  4708 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7736  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7737  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7738  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7739  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7740  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7741  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7742  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7743  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7744  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7745  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7746  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7747  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7748  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7749  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7750  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7751  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool www
php-fpm   7752  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7753  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7754  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7755  0.0  0.4 227776  4712 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7756  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7757  0.0  0.4 227776  4716 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7758  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7759  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7760  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7761  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7762  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7763  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7764  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7765  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7766  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7767  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7768  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7769  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7770  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
php-fpm   7771  0.0  0.4 227776  4720 ?        S    22:32   0:00 php-fpm: pool hanfeng.com
root      7775  0.0  0.0 112676   988 pts/0    R+   22:39   0:00 grep --color=auto php-fpm
[root@hanfeng etc]# 
  1. 在nginx中使用新的pool
[root@hanfeng etc]# cd /usr/local/nginx/conf/vhost/
[root@hanfeng vhost]# ls
aaa.com.conf  load.conf  proxy.conf  ssl.conf  test.com.conf
[root@hanfeng vhost]# 
  1. 可以把test.com.conf定義成fastcgi_pass unix:/tmp/php-fcgi.sock;
    • 這是www池子中的php-fcgi.sock
[root@hanfeng vhost]# vim test.com.confserver
{listen 80;server_name test.com test1.com test2.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 192.168.202.130;allow 127.0.0.1;deny all;}
location ~ \.php${include fastcgi_params;fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;}access_log /tmp/test.com.log combined_realip; 
}
  1. 再把另一個aaa.com.conf中 fastcgi_pass unix:/tmp/hanfeng.sock;
    • 這是hanfeng.com池子中的hanfeng.sock
    • 路徑/data/wwwroot/default$fastcgi_script_name;
[root@hanfeng vhost]# vim aaa.com.confserver
{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/hanfeng.sock;  fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;}
保存退出
  1. 這樣這兩個站點就隔離開了
  2. 假設現在test.com請求量很大,最終將進程耗盡了,比如php-fpm耗盡了,這時候又有其他請求來了,就會報502,因為沒有多余的php給進程提供服務了,而另一個站點則不受影響,因為使用的是另一個池子,另一個pool,這就是定義多個池子的原因

方法二

  1. 在vhost目錄下是多個.conf文件,在nginx.conf里面加了一條 include vhost/*.conf;
[root@hanfeng vhost]# ls
aaa.com.conf  load.conf  proxy.conf  ssl.conf  test.com.conf
[root@hanfeng vhost]# tail ../nginx.conftcp_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@hanfeng vhost]# 
  1. 在php-fpm同樣是支持 include vhost/*.conf;
  2. 在主配置文件php-fpm中的 [global] 加入include = etc/php-fpm.d/*.conf ,并將池子拆分出來,將其中的池子pool刪除
    • 快速刪除內容方法,100dd就會給刪除
[root@hanfeng 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]
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[hanfeng.com]
listen = /tmp/hanfeng.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@hanfeng etc]#

最終如下

[root@hanfeng 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
  1. 因為include = etc/php-fpm.d/,所以需要創建/php-fpm.d/的目錄
[root@hanfeng etc]# mkdir php-fpm.d
[root@hanfeng etc]# 
  1. 切換路徑,并創建www.conf,然后將之前php-fpm.conf中的www部分寫入到其中
[root@hanfeng etc]# cd !$
cd php-fpm.d
[root@hanfeng 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
保存退出
  1. 然后在創建hanfeng.conf
[root@hanfeng php-fpm.d]# vim hanfeng.conf[hanfeng.com]
listen = /tmp/hanfeng.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
保存退出
  1. 這樣看著就會很干凈,類似于nginx的vhost
  2. 檢查是否有錯誤
[root@hanfeng php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 23:28:58] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful[root@hanfeng php-fpm.d]# 
  1. 然后重啟查看
[root@hanfeng php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[root@hanfeng php-fpm.d]# !ps
ps aux |grep php-fpm
root      7832  0.2  0.4 227864  4980 ?        Ss   23:29   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm   7833  0.0  0.4 227804  4712 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7834  0.0  0.4 227804  4712 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7835  0.0  0.4 227804  4712 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7836  0.0  0.4 227804  4712 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7837  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7838  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7839  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7840  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7841  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7842  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7843  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7844  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7845  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7846  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7847  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7848  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7849  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7850  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7851  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7852  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool hanfeng.com
php-fpm   7853  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7854  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7855  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7856  0.0  0.4 227804  4716 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7857  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7858  0.0  0.4 227804  4720 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7859  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7860  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7861  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7862  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7863  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7864  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7865  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7866  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7867  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7868  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7869  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7870  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7871  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
php-fpm   7872  0.0  0.4 227804  4724 ?        S    23:29   0:00 php-fpm: pool www
root      7874  0.0  0.0 112676   988 pts/0    R+   23:29   0:00 grep --color=auto php-fpm
[root@hanfeng php-fpm.d]# 
  1. 這就是多個池子的配置方法

12.22 php-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@hanfeng 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
保存退出
  1. 查看語法錯誤,并重新加載
[root@hanfeng php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[10-Jan-2018 00:04:26] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful[root@hanfeng php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm  done
[root@hanfeng php-fpm.d]# 
  1. 查看/usr/local/php-fpm/var/log/www-slow.log日志是否生成
[root@hanfeng php-fpm.d]# ls /usr/local/php-fpm/var/log/
php-fpm.log  www-slow.log
[root@hanfeng php-fpm.d]# 
  1. 查看日志會看到沒有內容,因為沒有超過一秒php執行的過程
[root@hanfeng php-fpm.d]# cat /usr/local/php-fpm/var/log/www-slow.log 
[root@hanfeng php-fpm.d]# 
  1. 模擬一個慢執行的php,寫一個腳本,由于php-fcgi它是被在test這個站點用著,所以需要在這個/data/wwwroot/test.com目錄下做一些操作
[root@hanfeng php-fpm.d]# vim /data/wwwroot/test.com/sleep.php
加入php休眠兩秒鐘,故意讓它執行慢
<?php
echo “test slow log”;
sleep(2);echo “done”;
?>
保存退出
  • php可以不換行,寫成一行
  1. 運行php腳本,但是未輸出信息,檢測會看到狀態碼為500,說明有錯誤
[root@hf-01 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php
[root@hf-01 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 500 Internal Server Error
Server: nginx/1.12.1
Date: Tue, 09 Jan 2018 21:47:48 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30[root@hf-01 php-fpm.d]# 
  1. 可以查看錯誤日志,但有更簡單的方法就是打開它的配置文件
[root@hf-01 php-fpm.d]#  vim /usr/local/php-fpm/etc/php.ini搜索 /display ,找到display_errors將display_errors = Off 改為display_errors = On
  1. 打開display_errors之后,就可以在瀏覽器上查看到具體的錯誤是什么
  2. 重啟php
[root@hf-01 php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm  done
[root@hf-01 php-fpm.d]# 
  1. 檢查錯誤,會看到語法錯誤,有可能是逗號,分號寫的不對
[root@hf-01 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php
<br />
<b>Parse error</b>:  syntax error, unexpected 'slow' (T_STRING), expecting ',' or ';' in <b>/data/wwwroot/test.com/sleep.php</b> on line <b>2</b><br />
[root@hf-01 php-fpm.d]# 
  1. 檢查sleep.php文件,發現里面使用的中文標點,更改后重啟配置
[root@hf-01 php-fpm.d]# vim /data/wwwroot/test.com/sleep.php<?php
echo "test slow log";
sleep(2);
echo "done";
?>
保存退出
[root@hf-01 php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm  done
[root@hf-01 php-fpm.d]# 
  1. 再來測試,訪問成功,會看到訪問的時候停頓了幾秒
[root@hf-01 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php
test slow logdone[root@hf-01 php-fpm.d]# 
  1. 查看是否生成了慢日志
[root@hf-01 php-fpm.d]# cat /usr/local/php-fpm/var/log/www-slow.log [10-Jan-2018 06:02:21]  [pool www] pid 3442
script_filename = /data/wwwroot/test.com/sleep.php        //提示:是哪個腳本慢
[0x00007f37c5f7c298] sleep() /data/wwwroot/test.com/sleep.php:3    //提示:是腳本的第三慢
[root@hf-01 php-fpm.d]# 
  1. 這個就是慢執行日志的功效
  2. 在遇到php網站訪問慢的時候,就可以去查看慢日志
  3. 查看www.conf
[root@hf-01 php-fpm.d]# cat 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
[root@hf-01 php-fpm.d]# 

12.23 open_basedir

php-fpm定義open_basedir目錄概要

  • vim /usr/local/php-fpm/etc/php-fpm.d/test.conf//加入如下內容
php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/
  • 創建測試php腳本,進行測試
  • 再次更改aming.conf,修改路徑,再次測試
  • 配置錯誤日志
  • 再次測試
  • 查看錯誤日志

php-fpm定義open_basedir

  • open_basedir 的作用是限制php在指定的目錄里活動。
  • 因為如果服務器管理多個網站,在php.ini里定義多個open_basedir就不合適了,所以要么在apache虛擬主機配置文件里面定義,要么在php-fpm配置文件里面定義,我們可以針對不同的池子(pool)定義對應的open_basedir
    • 只需要加 下面一行配置即可
    php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/ 
    
      - 如果路徑出錯,就會無法正常訪問,導致404頁面 curl直接連會提示“No input file specified.”
    
  1. 針對www的pool進行配置
  • 在最后一行加入配置
[root@hf-01 php-fpm.d]# vim /usr/local/php-fpm/etc/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
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. 重啟php-fpm
[root@hf-01 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[root@hf-01 php-fpm.d]#
  1. 訪問測試
[root@hf-01 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Tue, 09 Jan 2018 22:56:24 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30[root@hf-01 php-fpm.d]# 
  1. 若open_basedir定義錯誤,就會導致無法訪問,形成404狀態碼,輸出curl直接連會提示“No input file specified.”
  2. 定義錯誤日志
[root@hf-01 php-fpm.d]# vi /usr/local/php-fpm/etc/php.ini搜索 /display_errors
將display_errors = Off
搜索 /error_log,添加error_log
;error_log = php_errors.log
; Log errors to syslog (Event Log on Windows).
;error_log = syslog
error_log = /usr/local/php-fpm/var/log/php_errors.log   //這一段定義錯誤日志
搜索error_reporting
注釋掉自帶的error_reporting
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL  //定義錯誤日志的級別,所有保存退出
  • display_errors = Off 正常情況下,在線上這個是off的,別人不能通過瀏覽器看到你的錯誤信息,而是把你的錯誤信息記錄到服務器的某一個文件里
  1. 查看設置的錯誤日志文件,并是否生成
[root@hf-01 php-fpm.d]# grep error_log /usr/local/php-fpm/etc/php.ini
; server-specific log, STDERR, or a location specified by the error_log
; Set maximum length of log_errors. In error_log information about the source is
;error_log = php_errors.log
;error_log = syslog
error_log = /usr/local/php-fpm/var/log/php_errors.log 
; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=
[root@hf-01 php-fpm.d]# [root@hf-01 php-fpm.d]# ls /usr/local/php-fpm/var/log/
php-fpm.log  www-slow.log
[root@hf-01 php-fpm.d]# 
  1. 手動生成錯誤日志文件,并設置權限為777,防止不能夠正常寫入
[root@hf-01 php-fpm.d]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@hf-01 php-fpm.d]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log 
[root@hf-01 php-fpm.d]# 
  1. 這里為了方便測試,故意將/usr/local/php-fpm/etc/php-fpm.d/www.conf 中的open_basedir路徑寫錯,來方便測試
  2. 重啟php-fpm
[root@hf-01 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[root@hf-01 php-fpm.d]# 
  1. 訪問測試,會看到顯示404
[root@hf-01 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.12.1
Date: Tue, 09 Jan 2018 23:35:31 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30[root@hf-01 php-fpm.d]# 
  1. 查看錯誤日志,會看到訪問地址有限制
[root@hf-01 php-fpm.d]# cat /usr/local/php-fpm/var/log/php_errors.log 
[09-Jan-2018 23:35:31 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/sleep.php) is not within the allowed path(s): (/data/wwwroot/111test.com:/tmp/) in Unknown on line 0
[09-Jan-2018 23:35:31 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0
[root@hf-01 php-fpm.d]# 
  1. 再將配置文件的open_basedir路徑修改過來,重新加載php-fpm,再來訪問,會看到正常顯示
[root@hf-01 php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf 
[root@hf-01 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[root@hf-01 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Tue, 09 Jan 2018 23:39:30 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30[root@hf-01 php-fpm.d]# 

12.24 php-fpm進程管理

php-fpm進程管理

[root@hf-01 ~]# cat /usr/local/php-fpm/etc/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
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
[root@hf-01 ~]# 
  • pm = dynamic //表示進程以什么形式啟動,dynamic就是動態,動態就是一開始為一個數值,根據需求再自動生成,服務器比較閑的時候還會去銷毀,銷毀到一定程度還有自動生成
  • pm.max_children = 50 //最大子進程數,ps aux可以查看
  • pm.start_servers = 20 //啟動服務時會啟動的進程數
  • pm.min_spare_servers = 5 //定義在空閑時段,子進程數的最少數量,如果達到這個數值時,php-fpm服務會自動派生新的子進程。
  • pm.max_spare_servers = 35 //定義在空閑時段,子進程數的最大值,如果高于這個數值就開始清理空閑的子進程。
  • pm.max_requests = 500 //定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多可以處理這么多請求,當達到這個數值時,它會自動退出。
  • 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/

dynamic和static

  • pm = dynamic //表示進程以什么形式啟動,dynamic就是動態,動態就是一開始為一個數值,根據需求再自動生成,服務器比較閑的時候還會去銷毀,銷毀到一定程度還有自動生成;根據下面的設置去進行設定“start_servers ”、“min_spare_servers ”、“max_spare_servers ”、“max_requests ”
  • pm = static 之后,一旦選擇這個設置,下面的pm的各種設置只會有一個max_children生效,并啟動的時候就生成50個

擴展

  1. nginx中的root和alias區別

  2. nginx的alias和root配置

  • 更詳細

轉載于:https://my.oschina.net/u/3707314/blog/1604292

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278652.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278652.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278652.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mysql+Navicat for Mysql

一、mysql 1.下載安裝 Mysql官網下載地址 下載后解壓 .zip &#xff08;或安裝.msi&#xff09; 2.可加入全局變量mysqld &#xff08;可選&#xff09; 我的電腦->屬性->高級->環境變量->Path(系統變量)&#xff0c;添加mysql下的bin目錄&#xff0c;如 D:\Pr…

公鑰,私鑰和數字簽名

一、公鑰加密 假設一下&#xff0c;我找了兩個數字&#xff0c;一個是1&#xff0c;一個是2。我喜歡2這個數字&#xff0c;就保留起來&#xff0c;不告訴你們(私鑰&#xff09;&#xff0c;然后我告訴大家&#xff0c;1是我的公鑰。 我有一個文件&#xff0c;不能讓別人看&…

MySQL中的日志類型(二)-General query log

簡介 General query log記錄客戶端的連接和斷開&#xff0c;以及從客戶端發來的每一個SQL語句。 日志內容格式 General query log可以記錄在文件中&#xff0c;也可以記錄在表中&#xff0c;格式如下&#xff1a;在文件中會記錄時間、線程ID、命令類型以及執行的語句示例如下&a…

android wi-fi_如何在Android手機上查找3G或Wi-Fi速度

android wi-fiAre you curious about what kind of connection speed you are getting with your Android phone? Today we’ll take a look at how to easily check your Wi-Fi or 3G speeds with Speedtest.net’s Speed Test app. 您是否對Android手機的連接速度感到好奇&a…

vue引入全局less實現全局變量的控制

vue引入全局less1.設置全局樣式變量的好處&#xff1a;2.以less為例&#xff08;sass等同原理&#xff09;1.vue-cli2搭建的項目&#xff08;1&#xff09;2.vue-cli2搭建的項目&#xff08;2&#xff09;3.vue-cli3、vue-cli43.vue-cli2和vue-cli3的區別4.vue-cli3和vue-cli4的…

如何在eclipse中對項目進行重新編譯

有時由于eclipse異常關閉&#xff0c;當我們重啟Eclipse&#xff0c;在啟動項目時&#xff0c;會報錯&#xff0c;說&#xff1a;ClassNotFound類似的錯誤&#xff0c;引起這種問題的原因可能是由于&#xff0c;Eclipse異常關閉引起的。 解決&#xff1a;在一個項目中&#xff…

SQL 查詢數據庫中包含指定字符串的相關表和相關記錄

declare str varchar(100)set str我要找的 --要搜索的字符串declare s varchar(8000)declare tb cursor local forselect if exists(select 1 from [b.name] where [a.name] like %str%)print [b.name].[a.name]from syscolumns a join sysobjects b on a.idb.idwhere b.xtype…

如何在Gmail的圖片中插入超鏈接

Adding hyperlinks is an efficient way of getting your reader to the intended web page. Though it’s no secret that you can add hyperlinks to text, Gmail also lets you add hyperlinks to images in the body of the email. Here’s how to make it happen. 添加超鏈…

內聯元素居中

父元素&#xff1a; height:100px; line-height:100px; // 與高相同 text-align:center; 子元素: display:inline; vertical-align: middle; 適用圖片、文字 <div><div class"wrapper"><span>我是文字</span></div><div class&qu…

防止html標簽轉義

function htmlDecode ( str ) {var ele document.createElement(span);ele.innerHTML str;return ele.textContent;} 例如body下邊所有的p標簽都防止轉義&#xff1a; $.each($("body").find(p),function(){this.innerHTML htmlDecode(this.innerHTML);}); 轉載于…

新垣結衣自拍照_如何阻止自拍照出現在iPhone的自拍照專輯中

新垣結衣自拍照Khamosh PathakKhamosh PathakThe Photos app on your iPhone automatically populates all photos from the front-facing camera in the Selfies album. But what if you don’t want a photo to appear there? Here are a couple of solutions. iPhone上的“…

前端個人筆記

前端個人筆記1.vue項目安裝依賴/插件時忘記--save&#xff0c;再次install出問題并且沒有報錯。2.margin移動元素不顯示背景色3.新知識&#xff1a;media 條件樣式4.入坑&#xff1a;row和col不能分離&#xff0c;span24不能不寫5.聚焦實現滾動到指定元素1.vue項目安裝依賴/插件…

kernel中對文件的讀寫【學習筆記】【原創】

/*1. 頭文件 */ #include <linux/init.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/fs.h> #include <linux/uaccess.h>MODULE_PARM_DESC(iva…

ssm項目快速搭建(注解)-依賴

父層jar包版本控制&#xff0c;管理配置 <!-- 集中定義依賴版本號 --> <properties> <junit.version>4.12</junit.version> <spring.version>4.2.4.RELEASE</spring.version> <pagehelper.version>4.0.0<…

如何設置自定義任務欄圖標_如何為任何應用程序自定義Windows 7任務欄圖標

如何設置自定義任務欄圖標Would you like to change out the icons on your taskbar with a beautiful set of icons that all go together? Here’s how you can change out the random candy-colored icons for a stylish icon set of your choice. 您是否要用一組漂亮的圖…

給谷歌瀏覽器安裝vue調試工具:vue-devtools

安裝vue-devtools一、拉取項目二、install、build三、添加擴展四、使用舉例一、拉取項目 vue-devtools&#xff1a;git地址&#xff08;master分支&#xff09; 非master分支在build的時候會報錯。 二、install、build 1、打開cmd進入項目目錄&#xff0c;可以選擇npm/cnpm/…

如何找到Windows 7或8家庭組密碼?

So you’re about to setup your new Windows 7 PC into your Homegroup when you realized that you have no idea what the password is. How do you find it? It’s actually pretty simple, if you know where to look. 因此&#xff0c;當您意識到自己不知道密碼是什么時…

vue3.0、cli4項目引入element plus

element團隊為新版的 vue-cli4 準備了相應的 Element Plus 插件 安裝依賴 npm install element-plus --savemain.js全局引入&#xff0c;樣式文件需要單獨引入 import { createApp } from vue import ElementPlus from element-plus; import element-plus/lib/theme-chalk/in…

MySQL索引背后的數據結構及算法原理

title: MySQL索引背后的數據結構及算法原理 date: 2018-07-25 19:50:16 tags: mysql categories: mysql --- 本文轉載自http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL為研究對象&#xff0c;討論與數據庫索引相關的一些話題。特別需要說明…

[SDOI2015]約數個數和

Sol 首先有個結論\(\sum_{i1}^{m}\sum_{j1}^{n}d(i*j)\sum_{i1}^{m}\sum_{j1}^{n}\sum_{x|i}\sum_{y|i}[gcd(x,y)1]\) 證明&#xff1a;可以看po姐的博客 接著這個式子推\[ 原式\sum_{x1}^{n}\sum_{y1}^{m}([gcd(x, y)1] * \sum_{x|i}\sum_{y|i} 1)\\ \sum_{x1}^{n}\sum_{y1}^{…