ELF php 可执行程序运行后加载重型脚本的过程

PS:本文就是用于回答我朋友的问题【本文以渣男角度陈述】  
本文来源北风之神  

原文链接:https://zhuanlan.zhihu.com/p/347867261

重型:是指php 可执行文件运行后,会调用大量的文件操作函数【如open,read等】读取大量的php文本文件【只不过老实人喜欢叫php源码文件,并且老实人喜欢重型脚本称为框架】  
【本文不按套路陈述用法也不讲用法,不适合小白,本文只是传达一个标题的概念】
本文的环境:linux+php+nginx 其它没有了【本人是渣男,不会遵守任何官方相应条款】
【本文需要你看完以自己去架着轰炸机去测试php-fpm】
安装流程      
1  去这里下载  【当然你老实本份就composer create-project laravel/laravel,我是渣男不老实,听说人家不喜欢老实人】    
图片.png

图片.png
2 安装  
图片.png

它安装时会读取composer.json等文件去下载类库文件,所以你如果安装时遇到各种问题,可以修改composer.json决定要装什么东西,人家说php版本必须是高版本才能装laravel8【这一般是老实的人才会遵守的条款,我是渣男,肯定不会遵守老外的条款】

3 然后瞎配置一下nginx[它会把数据发给php]  
图片.png

4 启动服务    
nginx只是转发请求给php-fpm处理而已,毕竟这是老传统了,当你愿意遵守这个传统条款时。  
图片.png

5 然后我先老实的访问一下  
图片.png
图片.png
图片.png

6 以上是老实做法,下面我们根据提示调整参数    
这些配置参数不用记,记来干什么?用来面试别人?真是老实人。
图片.png

然后重启服务 ,再来老实的访问
图片.png

然后出现这种,一般这种情况老实人就比较紧张了,怕人家强暴一样的紧张。我们现在看一下php-fpm进程执行的情况

图片.png

上面图中我圈出的就是重点,你硬是看不懂,我没有办法了。 要不599找我手把手教你吧。^_^

接下来根据它的提示调整一下  
图片.png

我们调整好以后,再访问
图片.png

这个时候你也别紧张兮兮,我们看一下php-fpm运行laravel的情况再说话,不要像怨妇一样上来就是啊,怎么办?

图片.png

我们看到这php-fpm在运行laravel时,打开的脚本文件那是相当多,我这里只是截图部分,为了处理一个小小的访问,它打开一堆脚本文件,后面它直接去访问500这个文件了。很不给面子。

图片.png

图片.png

7 接下来,我们一步步的看一下我运行,php-fpm为了处理这个重型框架到底加载了多少php脚本文件【部分截图】【自己用电脑看,不要用小的可怜兮兮的手机看,渣男就应该用PC看】

图片.png
图片.png
图片.png
图片.png
图片.png
图片.png

路由注册服务  
图片.png

Kernel 核心文件  
图片.png

好了,我们不是要研究框架的运行机制,我们现在先看一下500报错页面的加载
图片.png
图片.png

大家可以看到,一个小小的业务需求,它就加载一大堆的【open,read,lstat,close文件,这些操作都是要去磁盘里读取,框架越重,php-fpm处理时间越长,当然了php-fpm本身是个守护进程,接收一次tcp连接和数据传输后,它就断开了】在这里大家可以自行的进行测试,从框架的index.php到最后输出,打开了N个文件,都是要操作磁盘,读取的数据当然是要占用内存,c会申请一堆内存再去处理这些脚本的语法,进行解析。  

8 下面随便给你们看下问题所在  
图片.png

看一下它写的内容就知道问题在哪里了
write(4, "[2021-01-29 10:47:15] production.ERROR: No application encryption key has been specified. {"exception":"[object] (I
这句话看不懂,那就比较老火了。  
你们有兴趣就去看一下它的加密注册服务代码  
图片.png

解决一下  
图片.png

我不老实,不按上面解决,按渣男方式解决
图片.png
再访问时
图片.png
手动写一个
图片.png
图片.png

下面测试一下

图片.png
改成这吊样
图片.png

请求过程  
图片.png
图片.png

最后一把  
图片.png
图片.png
//请求
图片.png

路由注册
图片.png

控制器调度
图片.png

响应
图片.png
图片.png
图片.png

php-fpm和nginx运行时系统调用情况【响应北风之神内容的分析】  
【统计误差很小,大家可以自行统计】
1 系统调用时产生的记录日志大小
图片.png
php-fpm运行时的系统调用产生:1.4M
ngninx:1.5M

图片.png

open 打开php脚本文件次数  
图片.png
图片.png

open 打开php脚本后read读取脚本内容次数  
图片.png

read php脚本时大概读取多少个字节  
图片.png
图片.png

根据公式换算一下:
1M=1024KB
1KB=1024Byte
1M=1024*1024=1000,000
1362477=1330KB=1M

php-fpm响应给nginx字节数
图片.png
图片.png
nginx响应给用户的字节数
图片.png


声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

小周博客
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复 0人评论 7,777人参与

loading