2018-3-19 Linux學習筆記
阿新 • • 發佈:2018-03-19
12.21 php-fpm的pool 12.22 php-fpm慢執行日誌 12.23 open_basedir 12.24 php-fpm進程管理 12.21 php-fpm的pool
- 需求背景:
假設nginx有多個站點,每一個站點使用各自的pool,這樣當一個站點有問題(比如502錯誤)時,其他站點不會受到影響. - 以下以設置[www]和[karu]兩個pool為例來學習.
具體操作步驟: -
vim /usr/local/php-fpm/etc/php-fpm.conf #在[global]部分增加
include = etc/php-fpm.d/*.conf - mkdir /usr/local/php-fpm/etc/php-fpm.d/
- cd /usr/local/php-fpm/etc/php-fpm.d/
- 新增兩個配置文件www.con 和 karu.com並編輯如下:
-
vim www.conf #內容如下
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 -
vim karu.conf #內容如下
[karu]
listen = /tmp/karu.sock
listen.mode=666
user = php-fpm
group = php-fpm
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-fpm/sbin/php-fpm -t #檢測是否有語法錯誤
- /etc/init.d/php-fpm restart #重啟php-fpm服務以讓配置生效
12.22 php-fpm慢執行日誌[非常有用]
- 需求背景:
對於LNMP架構的網站,如果發現網站慢了,可借助php-fpm的慢執行日誌來排查由於php導致的緩解問題. - 實現的具體步驟如下:
- vim /usr/local/php-fpm/etc/php-fpm.d/karu.conf
- 在末尾加入如下內容:
request_slowlog_timeout = 1 #記錄php執行超過1秒的操作
slowlog = /usr/local/php-fpm/var/log/www-slow.log #定義慢執行日誌所在位置 - /usr/local/php-fpm/sbin/php-fpm -t
- /etc/init.d/php-fpm reload
- 模擬一個慢執行的php:
- vim /data/wwwroot/default/sleep.php #寫入如下內容
<?php
echo "test slow log";
sleep(2);
echo "done";
?>
- 測試結果:
curl -x127.0.0.1:80 default/sleep.php
cat /usr/local/php-fpm/var/log/www-slow.log
12.23 open_basedir
- (1) php-fpm中open_basedir的作用是限制php在指定的目錄裏活動,以提高站點的安全性.
- 具體配置如下:
vim /usr/local/php-fpm/etc/php-fpm.d/karu.conf - 加入如下內容
php_admin_value[open_basedir]=/data/wwwroot/default:/tmp/ - /usr/local/php-fpm/sbin/php-fpm -t
- /etc/init.d/php-fpm reload
-
測試:
curl -x127.0.0.1:80 default/sleep.php
curl -x127.0.0.1:80 default/sleep.php -I - (2) 配置php-fpm錯誤日誌
-
具體步驟如下:
vi /usr/local/php-fpm/etc/php.ini
display_errors = Off #不讓其他人能通過瀏覽器看到錯誤信息
log_errors = On #打開錯誤日誌記錄功能
error_log = /usr/local/php-fpm/var/log/php_errors.log #錯誤日誌存放位置
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT #定義錯誤日誌級別 - 再次編輯karu.conf
vim /usr/local/php-fpm/etc/php-fpm.d/karu.conf - 故意將其寫錯,比如:
php_admin_value[open_basedir]=/data/wwwroot/asdefault:/tmp/ - /usr/local/php-fpm/sbin/php-fpm -t
-
/etc/init.d/php-fpm reload
- 測試:
curl -x127.0.0.1:80 default/sleep.php
cat /usr/local/php-fpm/var/log/php_errors.log #查看錯誤日誌
12.24 php-fpm進程管理
- 在php-fpm的配置文件中有進程管理相關配置項,比如:
vim /usr/local/php-fpm/etc/php-fpm.d/karu.conf - 其具體含義如下:
- pm = dynamic
動態進程管理,也可以是static. 註意當為static時,以下的幾項就都不生效了! - pm.max_children = 50
最大子進程數 - pm.start_servers = 20
啟動服務時會啟動的進程數 - pm.min_spare_servers = 5
定義在空閑時段,子進程數的最少數量,如果達到這個數值時,php-fpm服務會自動派生新的子進程。 - pm.max_spare_servers = 35
定義在空閑時段,子進程數的最大值,如果高於這個數值就開始清理空閑的子進程。 - pm.max_requests = 500
定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多可以處理這麽多請求,當達到這個數值時,它會自動退出。
2018-3-19 Linux學習筆記