天天看點

PHP服務優化PHP配置⽂件1.通過 upstream_response_time 可以監控 Nginx 到 php 所消耗的時間2.php 的 error ⽇志說明。3.php-fpm的慢⽇志,php隻要處理超過1s就會有記錄4 PHP最終配置

PHP配置⽂件

1.php程式配置管理⽂件/etc/php.ini,主要調整⽇志、⽂件上傳、禁⽌危險函數、關閉版本号顯示、等

#實際上公司的php開發⼈員會在代碼中指定php錯誤⽇志輸出的位置。
#;;;;;;;;;;;;;;;;;
# Error logging ; #錯誤⽇志設定
#;;;;;;;;;;;;;;;;;
error_reporting = E_ALL # 記錄PHP所有錯誤⽇志
log_errors = On # 開啟錯誤⽇志
log_errors_max_len = 1024 #
error_log = /var/log/php_error.log # 錯誤⽇志存儲路徑
display_error = Off # 錯誤資訊會在浏覽器顯示,⽣産環境建議關閉
expose_php = Off # 關閉php版本資訊
date.timezone = Asia/Shanghai # 調整時區,預設PRC
#;;;;;;;;;;;;;;;
# File Uploads ; #⽂件上傳設定
#;;;;;;;;;;;;;;;
file_uploads = On # 允許⽂件上傳
upload_max_filesize = 300M # 允許上傳⽂件的最⼤⼤⼩
post_max_size = 300M # 允許用戶端單個POST請求發送的最⼤資料
max_file_uploads = 20 # 允許同時上傳的⽂件的最⼤數量
memory_limit = 128M # 每個腳本執⾏最⼤記憶體
#php禁⽌危險函數執⾏(取決于實際情況,需要和開發溝通)
disable_functions = chown,chmod,pfsockopen,phpinfo
           

php危險函數禁⽤參考清單

2.php-fpm程序管理配置⽂件/etc/php-fpm.conf

#第⼀部分,fpm配置
[[email protected] ~]# cat /etc/php-fpm.conf
....
;include=etc/fpm.d/*.conf
....
#第⼆部分,全局配置
[[email protected] ~]# cat /etc/php-fpm.d/www.conf
[global]
;pid = /var/log/php-fpm/php-fpm.pid #pid⽂件存放的位置
;error_log = /var/log/php-fpm.log #錯誤⽇志存放的位置
;log_level = error #⽇志級别, alert, error, warning, notice,
debug
rlimit_files = 65535 #php-fpm程序能夠使⽤的⽂件描述符
#第三部分,程序池定義
[www] #池名稱
user = www #程序運⾏的⽤戶
group = www #程序運⾏的組
;listen = /dev/shm/php-fpm.sock #監聽在本地socket⽂件
listen = 127.0.0.1:9000 #監聽在本地tcp的9000端⼝
;listen.allowed_clients = 127.0.0.1 #允許通路FastCGI程序的IP,any不限制
pm = dynamic #動态調節php-fpm的程序數
pm.max_children = 512 #最⼤啟動的php-fpm程序數 (峰值就到512個程序)
pm.start_servers = 32 #初始啟動的php-fpm程序數
pm.min_spare_servers = 32 #最少的空閑php-fpm程序數
pm.max_spare_servers = 64 #最⼤的空閑php-fpm程序數
pm.max_requests = 1500 #每⼀個程序能響應的請求數
pm.process_idle_timeout = 15s;
#第四部分,⽇志相關
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/phpfpm_error.log
php_admin_flag[log_errors] = on
#fpm慢⽇志
request_slowlog_timeout = 5s #php腳本執⾏超過5s的⽂件
slowlog = /var/log/php_slow.log #記錄⾄該⽂件中

           

2 PHP監控子產品

3.php-fpm監控子產品,⽤于監控php-fpm狀态使⽤

[[email protected] ~]# vim /etc/php-fpm.d/www.conf
pm.status_path = /phpfpm_status #開啟php的狀态⻚⾯
#修改nginx配置
[[email protected] conf.d]# cat /etc/nginx/conf.d/fpm.conf
server {
 listen 80;
 server_name php.bgx.com;
 location / {
 root /code;
 index index.php;
 }
 #新增如下配置
 location /phpfpm_status {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
 location ~ \.php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
 }
           

4.通路測試phpfpm_status狀态⻚⾯

[[email protected] ~]# curl http://127.0.0.1/phpfpm_status
pool: www #fpm池名稱,⼤多數為www
process manager: dynamic #動态管理phpfpm程序
start time: 05/Jul/2016 #啟動時間,如果重新開機會發⽣變化
start since: 409 #php-fpm運⾏時間
accepted conn: 22 #目前池接受的連接配接數
listen queue: 0 #請求等待隊列,如果這個值不為0,那麼需要增加FPM的程序數量
max listen queue: 0 #請求等待隊列最⾼的數量
listen queue len: 128 #請求等待隊列的⻓度
idle processes: 4 #php-fpm空閑的程序數量
active processes: 1 #php-fpm活躍的程序數量
total processes: 5 #php-fpm總的程序數量
max active processes: 2 #php-fpm最⼤活躍的程序數量(FPM啟動開始計算)
max children reached: 0 #程序最⼤數量限制的次數,如果數量不為0,則說明phpfpm最⼤進
程數量過⼩,可以适當調整。
           

3 PHP⽇志管理

php⽇志分為錯誤⽇志和慢⽇志。

1.通過 upstream_response_time 可以監控 Nginx 到 php 所消耗的時間

#Nginx在log_format中添加upstream_response_time
#編寫⼀個php代碼,然後觀察處理事件
<?php
 echo "oldxu test ok";
 sleep(1);
?>
           

2.php 的 error ⽇志說明。

#編寫php代碼測試
<?php
 echo "oldxu test ok";
 echo 2/0;
?>
#注意:如果啟⽤display_errors = On,會直接将錯誤顯示⽹⻚上。
           

3.php-fpm的慢⽇志,php隻要處理超過1s就會有記錄

slowlog = /tmp/phpslow.log
request_slowlog_timeout = 1s
#編寫php代碼測試
<?php
 echo "oldxu test ok";
 sleep(2);
?>
           

4 PHP最終配置

5.PHP-FPM配置⽂件 4核16G、4核32G

[[email protected] ~]# cat /etc/php-fpm.d/www.conf
[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
log_level = warning
rlimit_files = 655350
events.mechanism = epoll
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.owner = www
listen.group = www
listen.mode = 0660
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 512
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 64
pm.process_idle_timeout = 15s;
pm.max_requests = 2048
pm.status_path = /phpfpm_status
#php-www子產品錯誤⽇志
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php/php-www.log
php_admin_flag[log_errors] = on
#php慢查詢⽇志
request_slowlog_timeout = 5s
slowlog = /var/log/php-slow.log
           

繼續閱讀