這篇文章主要介紹優(yōu)化PHP的案例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)主營廣南網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都APP應用開發(fā),廣南h5微信小程序開發(fā)搭建,廣南網(wǎng)站營銷推廣歡迎廣南等地區(qū)企業(yè)咨詢網(wǎng)站架構簡介:
現(xiàn)在很多的企業(yè)都是使用lnmp或者lamp來做企業(yè)的網(wǎng)站服務器架構,這兩種網(wǎng)站的服務架構,我們都是比較熟悉的;基于nginx的性能優(yōu)于Apache,現(xiàn)階段的很多公司,都是逐漸把Apache替換成nginx,畢竟nginx的自帶的高可用配置,反向代理等等功能相當突出。
Lnmp網(wǎng)站服務器架構,其實就是linx+nginx+mysql+php架構體系,架構安裝我就不多說了。接下來我們來談談,我遇到案例吧
案例:
有一天,后臺的同事,說后臺訪問很慢,而且有時候出現(xiàn)502錯誤。然后反饋給技術上級,接著又找到我處理一下(那時在喝著茶),然后我知道又有事干了。
分析:
然后我直接找到那個同事,問問是不是網(wǎng)絡原因啊,我也叫其他的同事,訪問一下,還是出現(xiàn)訪問忙的問題。這時我就知道事情沒那么簡單了。公司應用的是lnmp網(wǎng)站服務器架構,以前沒有做太多的優(yōu)化,接下來我們需要優(yōu)化網(wǎng)站的服務架構了
一、案例分析。
我們可以想到,既然是訪問緩慢,有時候直接訪問不了,以前是沒問題的,到現(xiàn)在就突然出現(xiàn)了問題,那必定是我們的nginx與php響應不過來導致的,原因可能是其他域名網(wǎng)站的用戶連接數(shù)巨增導致的。那我們找到問題的根源解決并優(yōu)化就可以了。接著憑著自己的經(jīng)驗與百度,去解決問題。
二、問題解決與過程分析
1、Nginx優(yōu)化:
1、查看nginx的日志,找出錯誤
`$` cat `/usr/local/nginx/logs/error.log` | grep `error`
沒發(fā)現(xiàn)錯誤,正常
查看后臺域名的access.logs
$ cat /var/log/access_nging.log | grep error
(這里沒及時截到圖,日志是被刷了,本地做了日志切割,并定時刪除了)
發(fā)現(xiàn)日志日志里面可以找到error錯誤信息,并且有十幾個502錯誤。找到出現(xiàn)的問題了。
2、問題分析以及nginx優(yōu)化
1、nginx打開文件數(shù)限制導致的。
1)、首先我們想到可能的原因nginx的打開文件書的問題,增加nginx的打開文件數(shù)
進入nginx配置文件,發(fā)現(xiàn)打開文件數(shù)為4096,果不其然,打開文件數(shù)沒有調(diào)到很好,可能是這個原因?qū)е碌摹N覀冃枰?096改為51200;保存重新加載nginx
vim /usr/local/nginx/conf/nginx.conf worker_rlimit_nofile 51200; events { worker_connections 51200; } service nginx relaod
2)、Linux系統(tǒng)文件限制
我們改了nginx的打開文件配置,不一定有用,我們需要看一下系統(tǒng)的限制的打開文件數(shù)
ulimit –n
我們可以看到系統(tǒng)的文件打開數(shù)量也是4096,接下來,我們更改一下系統(tǒng)的打開文件數(shù),并配置永久生效。
進入配置文件
vim /etc/security/limits.conf
更改參數(shù):
soft nofile 65535
hard nofile 65535
soft nproc 65535
hard nproc 65535
注:系統(tǒng)限制可以隨便改,我只要比nginx的打開文件數(shù)大就好。
3、nginx的fastcgi連接時間太短導致的。
一般nginx響應php,都是通過FastCGI接口來調(diào)用,所以fastcgi參數(shù)配置很重要,當HTTP服務器每次遇到動態(tài)程序時,可以將其直接交付給FastCGI進程來執(zhí)行,然后將得到的結果返回給瀏覽器,而很多php的網(wǎng)頁都是采用動態(tài)程序。所以fastcgi的配置,也起的至關重要的作用。所以這是一個優(yōu)化不可缺少的一部分。
進入nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
把fastcgi的connect、send、read的參數(shù)的時間改成300,配置如下:
重新加載nginx
service nginx reload
4、訪問域名測試。
重新訪問域名,發(fā)現(xiàn)網(wǎng)頁已經(jīng)加載出來了,持續(xù)訪問了幾次,發(fā)現(xiàn)訪問還是有點慢,雖然訪問穩(wěn)定了。到這里,我們就可以把問題指向到php里面了,繼續(xù)下一步的php優(yōu)化。
2、Php優(yōu)化:
1、查看php日志
首先,我們需要跟nginx的操作一樣,需要先查看一下日志。
tail -n 100 /usr/local/php/var/log/php-fpm.log
在日志里面我們可以發(fā)現(xiàn),php日志出現(xiàn)警告
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)
從告警的意思,我們知道php出現(xiàn)告警了,而且是叫我們增加php的,pm.start_servers, or pm.min/max_spare_servers的值。
2、原因分析
首先我們,看到日志只是出現(xiàn)這個警告,證明還不是很嚴重,至于為什么出現(xiàn)源碼交易這個警告,接下來我們一起分析一下。
首先我們很明確的知道,pm.start_servers,、pm.min/max_spare_servers在php里面是起著啥作用先,為什么會出現(xiàn)這個警告。我先把的以前的配置參數(shù)貼一下。
接下來我們分析一下這幾個參數(shù)的作用:
參數(shù)分析:
·pm= dynamic 表示php啟用的動態(tài)模式 注: php有動態(tài)和靜態(tài)(static)兩種工作模式,默認是動態(tài)模式。
·pm.max_children 表示靜態(tài)下較大線程數(shù)
·pm.start_servers 表示動態(tài)下啟動時的線程數(shù),該參數(shù)大于pm.min_spare_servers,小于pm.max_spare_servers
·pm.min_spare_servers 表示動態(tài)下最小空閑線程數(shù)
·pm.max_spare_servers 表示動態(tài)下較大空閑線程數(shù)
工作模式:
Static模式
當工作模式設置為靜態(tài)后,就只有pm.max_children項有效,即表示php-fpm工作時一直保持的線程數(shù)。
Dynamic模式
動態(tài)模式下,與他相關的參數(shù)有pm.start_servers、pm.min_spare_servers 、pm.max_spare_servers,分別表示開啟的php進程數(shù),最小的進程數(shù)、與較大的進程數(shù)。
模式比較:
靜態(tài)模式的話,比較適合一些內(nèi)存比較大一點的服務器,8G及以上的,因為對于比較大內(nèi)存的服務器來說,設置為靜態(tài)的話會提高效率。
動態(tài)模式適合小內(nèi)存機器,靈活分配進程,省內(nèi)存。可以讓php自動增加和減少進程數(shù),不過動態(tài)創(chuàng)建回收進程對服務器也是一種消耗。
3、php參數(shù)優(yōu)化
首先我們需要考慮一下問題,如何去調(diào)試參數(shù),達到優(yōu)化的目的呢,一般來說開始的時候一個php-fpm進程只占用3M左右內(nèi)存,但是運行一段時間后就會上升到20-40M,這是因為PHP程序在執(zhí)行完成后,或多或少會產(chǎn)生內(nèi)存的泄露。
所以按理來說php的較大的進程數(shù),大概是本地內(nèi)存/40,因為也要考慮系統(tǒng)占用內(nèi)存的的這種情況,我們不能直接把除處理的結果,當成的較大進程數(shù),不然你會死翹翹的。
我的服務器是8G內(nèi)存的,所以按理來說是,較大的php進程數(shù)是200左右,所以按這個參數(shù)我做了一下調(diào)整:
采用靜態(tài)模式,較大進程數(shù)設為125-150之間,搞定。
重新加載php
service php-fpm relod
查看進程數(shù):
netstat -anpo | grep php-fpm | wc -l
`128`
效果達到了
4、結果
重新訪問,發(fā)現(xiàn)訪問php頁面快了很多,查看日志,沒出現(xiàn)告警了,后臺訪問也好了。
3、壓測
一個網(wǎng)站的性能好不好,承受量有多高,這個我們可以通過壓測去,去獲取數(shù)據(jù),我這里簡單介紹ab工具來做壓測,用法如下
ab -n 1000000 -c 10000 (一個php文件)
-n參數(shù)表示 你壓力測試 總量
-c參數(shù)表示 你的模擬的并發(fā)用戶數(shù)
Ab壓力測試工具,是apache自帶的,用起來也方便,只要本地有,就可以遠程測你的服務器的性能了。個人覺得還是可以了,下面是模擬一千個用戶訪問100000次的結果,但然你自己壓測的時候,慢慢的提升參數(shù),測試你的網(wǎng)站的瓶頸。
以上是“優(yōu)化PHP的案例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
名稱欄目:優(yōu)化PHP的案例分析-創(chuàng)新互聯(lián)
文章URL:http://vcdvsql.cn/article30/phopo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、品牌網(wǎng)站制作、電子商務、服務器托管、小程序開發(fā)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)