PHP和PHP-FPM 配置文件優化

前言:乘着此次空閒,來記錄下關於PHP和PHP-FPM配置文件的優化,也方便之後本身複習。php

先說PHP的web

一、PHP腳本執行時間服務器

max_execution_time = 30session

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

 

二、PHP腳本處理內存佔用socket

memory_limit = 8Mmemcached

該選項指定PHP腳本處理所能佔用的最大內存,默認爲8MB,若是您的服務器內存爲1GB以上,則該選項能夠設置爲12MB以得到更快的PHP腳本處理效率。 php-fpm

 

三、PHP上傳文件大小限制優化

upload_max_filesize = 2Mspa

max_file_uploads = 3

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

 

四、會話處理

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的配置

 

一、進程數

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 獲得。

 二、最大處理請求數

pm.max_requests = 10240

最大處理請求數是指一個php-fpm的worker進程在處理多少個請求後就終止掉,master進程會從新respawn一個新的。
這個配置的主要目的是避免php解釋器或程序引用的第三方庫形成的內存泄露。
 
三、最長執行時間
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使用率排查方法
一、CPU使用率監控方法
  1)top命令
    直接執行top命令後,輸入1就能夠看到各個核心的CPU使用率。
 
二、 開啓慢日誌
 
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配置的一些參數優化調整了。
相關文章
相關標籤/搜索