Nginx與PHP優化例項

2021-10-25 02:24:37 字數 4147 閱讀 5355

二、php優化

總結目前大部分企業都是使用lnmp或者lamp來做企業的**伺服器架構,這兩種**的服務架構,我們都是比較熟悉的服務架構,其實不管是什麼服務架構,nginx的優點都是比較明顯的,基於nginx的效能要優於apache,現階段的很多公司,都是逐漸把apache替換成了nginx,畢竟nginx的自帶的高可用配置、反向**、負載均衡等等功能相當突出。而其中很多服務都是需要優化的,本次來談談php的優化方案。

問題描述:有時候,我們會遇到後台服務訪問非常慢,甚至出現502、504的錯誤狀態碼。其實第一想到的是網路延遲問題,其次就是**服務架構的未做相關優化而導致的問題。如果不是網路延遲原因的話,那基本上就是伺服器優化方面的問題。下面介紹nginx與php一些比較常見的優化思路。

(1)檢視nginx的錯誤日誌

看看是否有錯誤資訊。

[root@zrs ~]# cat /usr/local/nginx/logs/error.log | grep error
(2)檢視nginx的訪問日誌

[root@zrs logs]# cat /usr/local/nginx/logs/access.log | grep error
如果錯誤日誌沒問題,那麼在後台網域名稱訪問日誌中可能就會報錯。如果是在後台網域名稱訪問日誌**現錯誤,那麼可以從以下幾個方面來優化nginx服務。

(1) nginx開啟檔案數限制所導致

nginx未做優化前的檔案最大開啟數。

思路: 增加nginx的開啟檔案數(在配置檔案nginx.conf中修改)

(2) linux系統檔案限制

改了nginx的開啟檔案配置,不一定有用,我們需要看一下系統的限制的開啟檔案數。

[root@zrs conf]# ulimit -n

1024

可以看到linux系統檔案開啟數也被限制, 接下來,我們更改一下系統的開啟檔案數,並配置永久生效。

[root@zrs conf]# vim /etc/security/limits.conf

# 修改如下。系統限制可以隨便改,我只要比nginx的開啟檔案數大就好。

* soft nofile 65535

* hard nofile 65535

* soft nproc 65535

* hard nproc 65535

一般nginx響應php,都是通過fastcgi介面來呼叫,所以fastcgi引數配置很重要,當http伺服器每次遇到動態程式時,可以將其直接交付給fastcgi程序來執行,然後將得到的結果返回給瀏覽器,而很多php的網頁都是採用動態程式。所以fastcgi的配置,也起的至關重要的作用,因此這是乙個優化不可缺少的一部分。

進入 nginx.conf 配置檔案。

到此nginx基本優化已經完成,這時可重新訪問一下url,雖然可以穩定載入頁面,不過訪問還是有些緩慢。接下來就該優化我們的php了。

同樣,我們也是需要檢視一下php的日誌檔案。

[root@zrs ~]# tail -n 100 /usr/local/php/var/log/php-fpm.log
在php日誌裡可能會出現各種警告,這時可根據告警提示去解決問題。比如說出現類似這種警告:

warning: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)
出現上述警告如何處理?接下來看一下php的幾個引數。引數

功能pm=dynamic

表示php啟用的動態模式。

pm.max_children

表示靜態下最大執行緒數。

pm.start_servers

表示動態下啟動時的執行緒數(該引數大於pm.min_spare_servers,小於pm.max_spare_servers)。

pm.min_spare_servers

表示動態下最小空閒執行緒數。

pm.max_spare_servers

表示動態下最大空閒執行緒數。

php有動態(dynamic)和靜態(static)兩種工作模式,預設是動態模式。

兩種工作模式比較

(1)設定php-fpm最大程序數

[root@zrs ~]# vim /etc/php-fpm.conf

[global]

...; 動態方式下開啟的php-fpm程序的最大數量

process.max = 2048

; 設定 fpm 在後台執行

daemonize = yes

; 設定程序可以開啟的檔案描述符數量

rlimit_files = 65535

; 設定fpm 的事件處理機制

events.mechanism = epoll

; 載入pool 配置

include = /etc/fpm.d/*.conf

(2)設定程序池

[root@zrs ~]# vim /etc/php-fpm.d/www.conf

[www]

...; 設定動態dynamic程序池/靜態static程序池

pm = dynamic

; 設定每個程序可處理的請求數,當程序達到這個請求數量後會自動釋放在重新生成新的程序。避免記憶體洩漏等情況

pm.max_requests = 1500

; 終止請求超時時間。乙個請求若處理大於20s ,則會自動kill掉。避免程序堆積

request_terminate_timeout = 20

; 限制 fpm 允許解析的指令碼副檔名. 這裡不限制,fpm可以解析任何副檔名的檔案

security.limit_extensions = ""

(3)修改php上傳檔案的大小

[root@zrs ~]# vim /etc/php.ini

max_execution_time = 0 #預設的該指令碼最久執行時間為30秒.就是說超過30秒,該指令碼就停止執行,0為不限制時間

post_max_size = 150m #預設post資料大小為8m,可以按實際情況修改

upload_max_filesize = 100m #預設上傳檔案最大為2m,可以按實際情況修改。

#注:另外要說明的是,post_max_size 大於 upload_max_filesize 為佳

一般來說開始的時候乙個php-fpm程序只占用3m左右記憶體,但是執行一段時間後就會上公升到20-40m,所以php的最大的程序數大概是本地記憶體1/40,當然也 要考慮系統占用記憶體的這種情況,故不能直接把除處理的結果,當成的最大程序數。

[root@zrs ~]# netstat -anpo | grep php-fpm | wc -l

php優化 nginx優化 mysql優化

php優化 1 將類的方法定義為static。2 盡量使用單引號。3 修改php fpm程序數。4 修改單個指令碼最大可使用記憶體。5 大的陣列使用完之後要及時釋放。6 迴圈的時候,制定最大迴圈次數 7 不使用 遮蔽錯誤 8 盡量採用大量的 php 內建函式 9 使用require代替require...

Nginx配置優化與系統核心優化

nginx配置檔案需要我們不斷地學習,當然在我們不斷的學習中有很多問題出現,那麼接下來我們就看看有關nginx配置檔案的相關問題解決。一般來說nginx配置檔案中對優化比較有作用的為以下幾項 worker processes 8 nginx配置檔案程序數,建議按照cpu數目來指定,一般為它的倍數。w...

配置優化nginx處理PHP的請求

第一步 接受請求,發現是php請求,轉向第二步。第二步 通過socket的方式,連線php fpm的fast cgi,讓php fpm處理請求。第三步 獲得php fpm處理結果,加上http報頭,返回給客戶端。所以,我們要提高nginx的php併發效能,我們需要做這三步。1.調大nginx的併發連...