ELF PHP 可執(zhí)行程序運行后加載重型腳本的過程
本文作者:https://learnku.com/users/41667
PS:本文就是用于回答我朋友的問題【本文以渣男角度陳述】
重型:是指php 可執(zhí)行文件運行后,會調(diào)用大量的文件操作函數(shù)【如open,read等】讀取大量的php文本文件
【本文不按套路陳述用法也不講用法,不適合小白,本文只是傳達一個標題的概念】
本文的環(huán)境:linux+php+nginx 其它沒有了【本人是渣男,不會遵守任何官方相應(yīng)條款】
【本文需要你看完以自己去架著轟炸機去測試php-fpm】
安裝流程
1 去這里下載 【當然你老實本份就composer create-project laravel/laravel,我是渣男不老實,聽說人家不喜歡老實人】

2 安裝
它安裝時會讀取composer.json等文件去下載類庫文件,所以你如果安裝時遇到各種問題,可以修改composer.json決定要裝什么東西,人家說php版本必須是高版本才能裝laravel8【這一般是老實的人才會遵守的條款,我是渣男,肯定不會遵守老外的條款】
3 然后瞎配置一下nginx[它會把數(shù)據(jù)發(fā)給php]
4 啟動服務(wù)
nginx只是轉(zhuǎn)發(fā)請求給php-fpm處理而已,畢竟這是老傳統(tǒng)了,當你愿意遵守這個傳統(tǒng)條款時。
5 然后我先老實的訪問一下


6 以上是老實做法,下面我們根據(jù)提示調(diào)整參數(shù)
這些配置參數(shù)不用記,記來干什么?用來面試別人?真是老實人。
然后重啟服務(wù) ,再來老實的訪問
然后出現(xiàn)這種,一般這種情況老實人就比較緊張了,怕人家強暴一樣的緊張。我們現(xiàn)在看一下php-fpm進程執(zhí)行的情況

上面圖中我圈出的就是重點,你硬是看不懂,我沒有辦法了。要不599找我手把手教你吧。^_^
接下來根據(jù)它的提示調(diào)整一下
我們調(diào)整好以后,再訪問
這個時候你也別緊張兮兮,我們看一下php-fpm運行l(wèi)aravel的情況再說話,不要像怨婦一樣上來就是啊,怎么辦?

我們看到這php-fpm在運行l(wèi)aravel時,打開的腳本文件那是相當多,我這里只是截圖部分,為了處理一個小小的訪問,它打開一堆腳本文件,后面它直接去訪問500這個文件了。很不給面子。


7 接下來,我們一步步的看一下我運行,php-fpm為了處理這個重型框架到底加載了多少php腳本文件【部分截圖】【自己用電腦看,不要用小的可憐兮兮的手機看,渣男就應(yīng)該用PC看】






路由注冊服務(wù)
Kernel 核心文件
好了,我們不是要研究框架的運行機制,我們現(xiàn)在先看一下500報錯頁面的加載

大家可以看到,一個小小的業(yè)務(wù)需求,它就加載一大堆的【open,read,lstat,close文件,這些操作都是要去磁盤里讀取,框架越重,php-fpm處理時間越長,當然了php-fpm本身是個守護進程,接收一次tcp連接和數(shù)據(jù)傳輸后,它就斷開了】在這里大家可以自行的進行測試,從框架的index.php到最后輸出,打開了N個文件,都是要操作磁盤,讀取的數(shù)據(jù)當然是要占用內(nèi)存,c會申請一堆內(nèi)存再去處理這些腳本的語法,進行解析。
8 下面隨便給你們看下問題所在
看一下它寫的內(nèi)容就知道問題在哪里了
write(4, “[2021-01-29 10:47:15] production.ERROR: No application encryption key has been specified. {“exception”:”[object] (I
這句話看不懂,那就比較老火了。
你們有興趣就去看一下它的加密注冊服務(wù)代碼
解決一下
我不老實,不按上面解決,按渣男方式解決
再訪問時
手動寫一個

下面測試一下

改成這吊樣
請求過程

最后一把

//請求
路由注冊
控制器調(diào)度
響應(yīng)


php-fpm和nginx運行時系統(tǒng)調(diào)用情況【響應(yīng)北風之神內(nèi)容的分析】
【統(tǒng)計誤差很小,大家可以自行統(tǒng)計】
1 系統(tǒng)調(diào)用時產(chǎn)生的記錄日志大小
php-fpm運行時的系統(tǒng)調(diào)用產(chǎn)生:1.4M
ngninx:1.5M

open 打開php腳本文件次數(shù)

open 打開php腳本后read讀取腳本內(nèi)容次數(shù)
read php腳本時大概讀取多少個字節(jié)

根據(jù)公式換算一下:
1M=1024KB
1KB=1024Byte
1M=1024*1024=1000,000
1362477=1330KB=1M
php-fpm響應(yīng)給nginx字節(jié)數(shù)

nginx響應(yīng)給用戶的字節(jié)數(shù)

