ELF PHP 可执行程序运行后加载重型脚本的过程
共 1873字,需浏览 4分钟
·
2021-02-04 19:03
本文作者:https://learnku.com/users/41667
PS:本文就是用于回答我朋友的问题【本文以渣男角度陈述】
重型:是指php 可执行文件运行后,会调用大量的文件操作函数【如open,read等】读取大量的php文本文件
【本文不按套路陈述用法也不讲用法,不适合小白,本文只是传达一个标题的概念】
本文的环境:linux+php+nginx 其它没有了【本人是渣男,不会遵守任何官方相应条款】
【本文需要你看完以自己去架着轰炸机去测试php-fpm】
安装流程
1 去这里下载 【当然你老实本份就composer create-project laravel/laravel,我是渣男不老实,听说人家不喜欢老实人】
2 安装
它安装时会读取composer.json等文件去下载类库文件,所以你如果安装时遇到各种问题,可以修改composer.json决定要装什么东西,人家说php版本必须是高版本才能装laravel8【这一般是老实的人才会遵守的条款,我是渣男,肯定不会遵守老外的条款】
3 然后瞎配置一下nginx[它会把数据发给php]
4 启动服务
nginx只是转发请求给php-fpm处理而已,毕竟这是老传统了,当你愿意遵守这个传统条款时。
5 然后我先老实的访问一下
6 以上是老实做法,下面我们根据提示调整参数
这些配置参数不用记,记来干什么?用来面试别人?真是老实人。
然后重启服务 ,再来老实的访问
然后出现这种,一般这种情况老实人就比较紧张了,怕人家强暴一样的紧张。我们现在看一下php-fpm进程执行的情况
上面图中我圈出的就是重点,你硬是看不懂,我没有办法了。要不599找我手把手教你吧。^_^
接下来根据它的提示调整一下
我们调整好以后,再访问
这个时候你也别紧张兮兮,我们看一下php-fpm运行laravel的情况再说话,不要像怨妇一样上来就是啊,怎么办?
我们看到这php-fpm在运行laravel时,打开的脚本文件那是相当多,我这里只是截图部分,为了处理一个小小的访问,它打开一堆脚本文件,后面它直接去访问500这个文件了。很不给面子。
7 接下来,我们一步步的看一下我运行,php-fpm为了处理这个重型框架到底加载了多少php脚本文件【部分截图】【自己用电脑看,不要用小的可怜兮兮的手机看,渣男就应该用PC看】
路由注册服务
Kernel 核心文件
好了,我们不是要研究框架的运行机制,我们现在先看一下500报错页面的加载
大家可以看到,一个小小的业务需求,它就加载一大堆的【open,read,lstat,close文件,这些操作都是要去磁盘里读取,框架越重,php-fpm处理时间越长,当然了php-fpm本身是个守护进程,接收一次tcp连接和数据传输后,它就断开了】在这里大家可以自行的进行测试,从框架的index.php到最后输出,打开了N个文件,都是要操作磁盘,读取的数据当然是要占用内存,c会申请一堆内存再去处理这些脚本的语法,进行解析。
8 下面随便给你们看下问题所在
看一下它写的内容就知道问题在哪里了
write(4, “[2021-01-29 10:47:15] production.ERROR: No application encryption key has been specified. {“exception”:”[object] (I
这句话看不懂,那就比较老火了。
你们有兴趣就去看一下它的加密注册服务代码
解决一下
我不老实,不按上面解决,按渣男方式解决
再访问时
手动写一个
下面测试一下
改成这吊样
请求过程
最后一把
//请求
路由注册
控制器调度
响应
php-fpm和nginx运行时系统调用情况【响应北风之神内容的分析】
【统计误差很小,大家可以自行统计】
1 系统调用时产生的记录日志大小
php-fpm运行时的系统调用产生:1.4M
ngninx:1.5M
open 打开php脚本文件次数
open 打开php脚本后read读取脚本内容次数
read php脚本时大概读取多少个字节
根据公式换算一下:
1M=1024KB
1KB=1024Byte
1M=1024*1024=1000,000
1362477=1330KB=1M
php-fpm响应给nginx字节数
nginx响应给用户的字节数