PHP和PHP-FPM 配置文件優化


前言:乘着這次空閑,來記錄下關於PHP和PHP-FPM配置文件的優化,也方便以后自己復習。

先說PHP的

1、PHP腳本執行時間

max_execution_time = 30

該選項設定PHP程序的最大執行時間,如果一個PHP腳本被請求,且該PHP腳本在max_execution_time時間內沒能執行完畢,則PHP不再繼續執行,直接給客戶端返回超時錯誤。沒有特殊需要該選項可保持默認設置30秒,如果您的PHP腳本確實需要長執行時間則可以適當增大該時間設置。 

 

2、PHP腳本處理內存占用

memory_limit = 8M

該選項指定PHP腳本處理所能占用的最大內存,默認為8MB,如果您的服務器內存為1GB以上,則該選項可以設置為12MB以獲得更快的PHP腳本處理效率。 

 

3、PHP上傳文件大小限制

upload_max_filesize = 2M

max_file_uploads = 3

該選項設定PHP所能允許最大上傳文件大小,默認為2MB。根據實際應用需求,可以適當增大該設置,max_file_uploads表示單次請求最多只能上傳 3 個文件

 

4、會話處理

session.save_handler = 'memcached'   // 存放方式

session.save_path = '127.0.0.1:11211'  // 存放路徑

該選項用於配置會話的存儲方式和存放路徑,默認是file文件方式,默認方式會拖慢大型應用,因為這個處理程序會把會話數據存儲在硬盤中,需要創建不必要的磁盤 I/O,浪費時間。

以上就是一些常見的優化和配置了

 

再說下PHP-FPM的

說之前,我們先了解下什么是PHP-FPM。PHP-FPM(FastCGI Process Manager:FastCGI進程管理器)是一個PHP-FastCGI管理器。那么PHP-FastCGI又是什么呢?

FastCGI是一個可伸縮地、高速地在HTTP服務器和動態腳本語言間通信的接口(FastCGI接口在Linux下是socket(可以是文件socket,也可以是ip socket)),主要優點是把動態語言和HTTP服務器分離開來。多數流行的HTTP服務器都支持FastCGI,包括Apache、Nginx和lightpd。

好了,這2個大概是了解了,下面說下PHP-FPM的配置

 

1、進程數

pm = static // 使用方式;還有一個dynamic(動態)

 

pm.max_children = 300  // 靜態方式下開啟的php-fpm進程數量

 

pm.start_servers = 20 // 動態方式下的起始php-fpm進程數量

 

pm.min_spare_servers = 5 // 動態方式下的最小php-fpm進程數

 

pm.max_spare_servers = 30 // 動態方式下的最大php-fpm進程數量

關於選擇靜態還是動態
對於內存大的服務器(比如8G以上)來說,指定靜態的max_children實際上更為妥當,因為這樣不需要進行額外的進程數目控制,會提高效率。
對於小內存的服務器來說,比如256M內存的VPS,選擇動態比較好,因為動態方式會結束掉多余的進程,可以回收釋放一些內存,所以推薦在內存較少的服務器或VPS上使用。具體最大數量根據 內存/20M 得到。

 2、最大處理請求數

pm.max_requests = 10240

最大處理請求數是指一個php-fpm的worker進程在處理多少個請求后就終止掉,master進程會重新respawn一個新的。
這個配置的主要目的是避免php解釋器或程序引用的第三方庫造成的內存泄露。
 
3、最長執行時間
request_terminate_timeout = 30
最大執行時間在php.ini和php-fpm.conf里都可以配置,配置項分別為max_execution_time和request_terminate_timeout。
這兩項都是用來配置一個PHP腳本的最大執行時間的。當超過這個時間時,PHP-FPM不只會終止腳本的執行,
還會終止執行腳本的Worker進程。所以Nginx會發現與自己通信的連接斷掉了,就會返回給客戶端502錯誤。
其作用及其影響參見: Nginx中502和504錯誤詳解
以上就是PHP-FPM配置文件的一些參數優化了
 

既然說到了PHP-FPM了,那就簡單介紹下 php-fpm的高CPU使用率排查方法
1、CPU使用率監控方法
  1)top命令
    直接執行top命令后,輸入1就可以看到各個核心的CPU使用率。
 
2、 開啟慢日志
 
request_slowlog_timeout = 2
slowlog = log/$pool.log.slow
 
配置輸出php-fpm慢日志,閥值為2秒
利用sort/uniq命令分析匯總php-fpm慢日志:
[root@b28-12 log]# grep -v "^$" www.log.slow.tmp | cut -d " " -f 3,2 | sort | uniq -c | sort -k1,1nr | head -n 50
    5181 run() /www/test.net/framework/web/filters/CFilter.php:41
    5156 filter() /www/test.net/framework/web/filters/CFilterChain.php:131
    2670 = /www/test.net/index.php
    2636 run() /www/test.net/application/controllers/survey/index.php:665
    2630 action() /www/test.net/application/controllers/survey/index.php:18
    2625 run() /www/test.net/framework/web/actions/CAction.php:75
    2605 runWithParams() /www/test.net/framework/web/CController.php:309
    2604 runAction() /www/test.net/framework/web/filters/CFilterChain.php:134
    2538 run() /www/test.net/framework/web/CController.php:292
    2484 runActionWithFilters() /www/test.net/framework/web/CController.php:266
    2251 run() /www/test.net/framework/web/CWebApplication.php:276
    1799 translate() /www/test.net/application/libraries/Limesurvey_lang.php:118
    1786 load_tables() /www/test.net/application/third_party/php-gettext/gettext.php:254
    1447 runController() /www/test.net/framework/web/CWebApplication.php:135
 
參數解釋:
     sort:  對單詞進行排序
     uniq -c:  顯示唯一的行,並在每行行首加上本行在文件中出現的次數
     sort -k1,1nr:  按照第一個字段,數值排序,且為逆序
     head -10:  取前10行數據
 
好了,以上就是PHP和PHP-FPM配置的一些參數優化調整了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM