测试PHP-FPM的工作流中的疑惑点
顺序比较乱,想到什么测试什么,测试环境 PHP7.2 和 MariaDB10.3.11
PHP-FPM是 master/worker 多进程模型
master负责和web-server通讯,把接受到请求分发到一个子进程(worker)处理
worker进程出现异常退出不会影响到master,master会重新启动一个新的子进程
2. 打开持久化的数据库连接:
$mysqli = new mysqli('p:host', 'user', 'password', 'dbname');
注意: 文档中说 持久化连接不能显示关闭,$mysqli->close() 无效,实测结果发现:$mysqli->close() 确实无法关闭数据库资源连接,
但是这句话后面的sql查询是无法执行的,但是不影响下一个php请求。
3. 打开非持久化的数据库连接
$mysqli = new mysqli('host', 'user', 'password', 'dbname');
如果使用持久化方式连接数据库,当子进程完成任务后不会立马关闭与数据库的连接,当下一个请求任务过来后会继续使用这个连接,
(这里持久化只是PHP不主动关闭连接,但不保证MySQL不主动断开,MySQL可以通过配置wait_timeout来主动关闭长时间没有活动的连接)
非持久连接方式会在任务处理完后立即关闭数据库连接
持久连接带来了一个直观的好处,性能提升,但也带来了很多不可预知的错误,比如上一个连接开启了事务但是没有提交,那后面连接上的操作
会出现问题
持久化连接的数据库句柄是保存在子进程的,如果有30个子进程都连接了数据库,那么这30个子进程都会保持和数据库的连接,
所以有个地方需要特别注意,MySQL的最大连接数一定要设置为大于PHP子进程最大数量,否则MySQL会出现 too many connections 错误
查看MySQL当前连接数(每隔一秒刷新一次)
mysqladmin -uroot -p123456 -i processlist 查看InnoDB的事务和锁
SHOW ENGINE INNODB STATUS;
4. 如果PHP子进程正常/意外退出,MySQL连接会不会自动释放?
不管子进程是正常退出(处理完请求)还是意外退出(直接kill掉),
也不管和数据库是长连接还是短链接,数据库都会自动断开
5. 如果浏览器发送一个复杂的请求,导致服务器返回超时,会发生什么?
这个要分两种情况:
Nginx超时:服务器返回504,这个时候PHP子进程不受影响继续执行,和数据库的连接也不会断开,最终任务会成功执行(前提是PHP不超时)
这种情况很糟糕,用户看到的是失败,后台却执行成功了,用户可能会反复重试多次,造成数据错乱。
PHP超时:服务器返回502,这个时候PHP子进程会被Master杀掉并重启一个子进程,所以任务是没有执行成功的,数据库资源也会自动断开
6. 如果子进程连接数据库并开启了事务,但是最后没有提交,会发生什么?
分两种情况:
数据库为非持久连接: 这种情况下数据库连接都关闭了,就别操心事务了
数据库持久连接:这个情况下官方的说法是要银熊后面的请求,但是实际测试发现,没有影响,如果实在担心的话,可以使用函数 register_shutdown_function
对每个请求结束前处理一下
register_shutdown_function(function() {
echo ("shutdown process");
});
7. 做一个实验:配置PHP-FPM只启动一个子进程,浏览器连续发送3个请求,PHP处理程序中sleep 25秒
观察现象:
通过top可以看到确实始终只有一个 PHP子进程
通过 mysqladmin 查看,始终只有一个连接
第一个请求在25秒后返回了数据
第二个请求在第50秒返回了数据
第三个请求返回504(Nginx默认60s超时)
结论: 一个PHP子进程只能同时处理一个请求,多余的未分配的请求任务堆积在Master主进程中等待空闲子进程
8. 既然PHP子进程某一瞬间只能同时处理一个任务,
从这个理论出发,有人就会有疑问了,是不是服务器开启100个PHP子进程,那么这台服务器的最大并发就是100?
这个地方需要弄清楚并发的概念,并发并不是只一瞬间能处理多少请求,而是指在正常人可以接收的等待时间内(比如2秒)
可以处理多少个请求,所以并发数量是远远超过100的
测试PHP-FPM的工作流中的疑惑点的更多相关文章
- 【转】SharePoint工作流中常用的方法
SharePoint中使用工作流对象模型. SharePoint工作流对象模型在Microsoft.SharePoint.Workflow命名空间.你可以利用此对象模型对你的工作流进行编程.你可以启动 ...
- 关于 self 和 super 在oc 中 的疑惑 与 分析
关于 self 和 super 在oc 中 的疑惑 与 分析 面试一定都是很注重 基础的,不管高级还是初级. 虽然基础好跟基础不好都可以写 代码,网上那么多资料. 区分高低也就是研究的深度和广度 ...
- 测试开发技术:DOM中 innerHTML、innerText、outerHTML、outerText的区别
测试开发技术:DOM中 innerHTML.innerText.outerHTML.outerText的区别 我们在做web自动化的过程中通过dom处理web页面元素,那么你就要了解innerHT ...
- 通过ALM OTA API获取test case的信息,并上传测试结果到test set中
ALM提供了OTA接口,可以用来获取和上传测试数据到ALM.比如获取Test case的step信息.上传测试结果到test instance. 在ALM的Help中可以下载相关文档,这里以ALM11 ...
- javascript状态机及在工作流中的应用
#javascript状态机及在工作流中的应用 ##状态机 什么叫状态机(Finite State Machine),书面上的解释可以自己借助搜索引擎寻找到.通俗地来讲是一个状态定义.查找.切换和事件 ...
- Kail Linux渗透测试教程之在Metasploit中扫描
Kail Linux渗透测试教程之在Metasploit中扫描 在Metasploit中扫描 在Metasploit中,附带了大量的内置扫描器.使用这些扫描器可以搜索并获得来自一台计算机或一个完整网络 ...
- odoo 在原有工作流中添加审批流
odoo 在原有工作流中添加审批流 步骤: 1.加入所需的工作流节点以及相连的线(即所添加的审批流),代码如下: <?xml version="1.0" encoding=& ...
- [测试] 试用Hadoop 2.2中的HDFS NFS
Hadoop 2.2中正式启用了hdfs nfs功能,使得hdfs的通用性迈进了一大步.在公司让小朋友搭建了一下,然后我自己进行了一点简单的试验,有一点收获,记录在此. 理论 使用hdfs nfs功能 ...
- 算法导论----VLSI芯片测试; n个手机中过半是好的,找出哪些是好手机
对于分治(Divide and Conquer)的题目,最重要是 1.如何将原问题分解为若干个子问题, 2.子问题中是所有的都需要求解,还是选择一部分子问题即可. 还有一点其实非常关键,但是往往会被忽 ...
随机推荐
- Uncaught SyntaxError: Unexpected token o
浏览器报Uncaught SyntaxError: Unexpected token o 这原因是你ajax获取数据的时候对数据进行错误操作,比如使用了 JSON.parse(data) 对数据进行转 ...
- CFD-Post批处理(在一系列算例同一位置截取速度云图)
批量在一系列算例的同一位置截取面,并显示截面的速度分布云图 现在我们有一系列的算例 我们打开CFD-Post 我们编写如下的Python代码来实现在一系列算例的同一位置截面,并显示界面的速度分布云图 ...
- 安装关系型数据库MySQL 安装大数据处理框架Hadoop
作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 1.Hadoop的介绍 Hadoop最早起源于Nutch.Nut ...
- TCP连接关闭总结
由于涉及面太广,只作简单整理,有兴趣的可参考<UNIX Networking Programming>volum 1, Section 5.7, 5.12, 5.14, 5.15, 6.6 ...
- fxjwind Calcite分析 - Volcano模型
参考,https://matt33.com/2019/03/17/apache-calcite-planner/ Volcano模型使用,分为下面几个步骤, //1. 初始化 VolcanoPlann ...
- odoo开发笔记 -- 模型(类)继承的几种机制
1. 类继承 2. 原型继承 3. 委托继承 待完善 https://www.cnblogs.com/chenshuquan/p/10523626.html
- 泡泡一分钟:Tightly-Coupled Aided Inertial Navigation with Point and Plane Features
Tightly-Coupled Aided Inertial Navigation with Point and Plane Features 具有点和平面特征的紧密耦合辅助惯性导航 Yulin Ya ...
- wamp64显示黄色图标不能忍
哎,昨天硬盘合区了下,重新安装了wamp64,删库的时候忘记备份数据库,灾难啊,只能自己重新建库建表了,深刻的教训啊. 然后还启动后是黄色图标,不能忍啊,发现wamp64需要启动三个服务,mysql, ...
- 必备Linux命令
文章来源:https://macrozheng.github.io/mall-learning/#/reference/linux 开发者必备Linux命令 开发者必备Linux常用命令,掌握这些命令 ...
- [转自baidu]修正古人五行,《七行说》之提出
一.论原五行相生.相克关系不妥之处: 祖国医学原“五行说”即金.木.水.火.土.在五行学说中说相生规律为:金生水:水生木:木生火:火生土:土生金.相克规律为:火克金:金克木:木克土:土克水:水克火.这 ...