好久没写博客了,因为没有啥可写。

之所以有此疑问,是因为看了一篇大牛的文章:PHP升级导致系统负载过高问题分析。看完后,其中有些文字触发了我这个想法,也想验证一下。

方案,用tcpdump抓包,用strace获取系统调用

tcpdump port  or port  -i lo -s  -w temp

8080是nginx的服务端口,9000是php-fpm服务的端口,抓这两个端口是想看到浏览器、nginx、php-fpm三者之间的交互。抓完包后,用wireshark分析,如下:

解释如下:

1,46540是浏览器的端口,http-alt是nginx,54352是nginx请求php-fpm的端口,cslistener是php-fpm

2,因为我所有的操作都是在一台机器上,包括浏览器访问,所以所有的IP都是127.0.0.1

3,

A:图中第一部分,代表浏览器和nginx的三次握手的过程。

B:图中第二部分,代表浏览器向nginx请求一个URL。

C:图中第三部分,代表nginx与php-fpm三次握手的过程。

D:图中第四部分,代表nginx将浏览器的请求转发给php-fpm。

E:图中第五部分的11,13,14行,代表浏览器主动关闭了与nginx之间的连接。为什么关闭呢,因为我不断的刷新页面,在第二次刷新的时候,浏览器会关闭上一次的请求。

为什么是三次关闭,而不是四次握手关闭呢?因为第13行其实是两个包合成一个包发送了,这应该算tcp的优化吧。

F:图中第五部分的12,25行,代表nginx将浏览器关闭连接的消息,告诉了php-fpm。

G:图中第六部分,通过左边的时间可以发现,是5秒种之后,php-fpm试图向nginx返回它縇染后的页面,但nginx直接reset掉了这个连接。

为什么是5秒种之后返回呢,因为我在php程序的第一行sleep(5),用于模拟时间较长的业务逻辑处理。

分析到这里,结论已经很明显了,就是:

浏览器关闭请求后,nginx会通知到php-fpm,但php-fpm忽略了这个通知,继续处理,直到发送处理结果时,才知道了连接已经被关闭。

我想在这里,php-fpm还是有可以优化的空间的。

大家可以看下strace的结果,也可以验证上面的结论。

php-fpm正在生成页面时,浏览器刷新后,php-fpm会退出吗?的更多相关文章

  1. easyui修复浏览器刷新后,tab页全部关闭的问题

    一.问题描述 使用easyui搭建的上左右页面布局,当我们在右侧打开了tab页,发现点击浏览器的刷新按钮后,整个页面会被重新渲染,导致所有打开的tab页都被关闭,回到初始状态的问题. 这个问题虽然不影 ...

  2. 当你刷新当前Table时,刷新后如何回到你上一次所在位置呢?

    第一: 在你刷新前保存所在位置的行号 procedure XXXClass.LockPositionEx;begin DisableControls; FHistoryRecNo := 0; FHis ...

  3. JQuery怎么实现页面左侧菜单刷新后保留鼠标点击addclass的样式?

    $('ul.main-menu li a').each(function(){ if($($(this))[0].href==String(window.location)) $(this).pare ...

  4. C#屏蔽Alt+F4,解决Alt+F4关闭窗体时对话框NO后,线程不退出问题

    //1.将窗体的属性KeyPrieview设置为true //keypreview属性为true的时候,就可以响应键盘事件v //2.在窗体KeyDown事件中加如下代码 private void F ...

  5. JS事件 卸载事件 当用户退出页面时(页面关闭、页面刷新等),触发onUnload事件,同时执行被调用的程序。注意:不同浏览器对onunload事件支持不同。

    卸载事件(onunload) 当用户退出页面时(页面关闭.页面刷新等),触发onUnload事件,同时执行被调用的程序. 注意:不同浏览器对onunload事件支持不同. 如下代码,当退出页面时,弹出 ...

  6. qq音乐网站页面切换歌手分类时不刷新

    1.提交表单时会自动刷新页面(提交表单一般使用post方式提交) 2.动态加载数据时页面不会刷新,只是把页面中某个位置的内容替换掉想要的内容 3.一般在切换到不同的html页面时才会强制让你把页面刷新 ...

  7. 刷新页面时 select值保持不变

    刷新页面时,要使下拉菜单(select).raido保持不变,用ajax是无法实现的.我想只能通过cookies才能实现.刷新前先把select或radio的值保存在cookies中,刷新后再填回去. ...

  8. 关闭open页面时刷新父页面列表

    var winObjEI = window.open("/Invoice/InvoiceViewEI?invoiceid=" + data.InvoiceId); ; //关闭op ...

  9. react+antd分页 实现分页及页面刷新时回到刷新前的page

    antd框架地址:https://ant.design/index-cn 利用antdUI框架做了个分页,其他功能都没问题,但是页面跳转后刷新会回到第一页,经过学习,在组件里增加了hash值,详情请看 ...

随机推荐

  1. CSS3制作下拉菜单

    导航菜单其实是没有什么可说的,制作方法到处可见,今天这个案例本来不只是一个导 航,还有一个搜索表单的,可是为了偷懒,把搜索表单部分去掉了,就变成了一个CSS3 制作的下拉菜单.在这个导航中主要两点,一 ...

  2. BZOJ 4027 [HEOI 2015] 兔子与樱花 解题报告

    这个题看起来好神的感觉.实际上也好神... 我们可以考虑设 $f_u$ 表示以 $u$ 为根的子树中最多能删多少个点, 再设 $g_u$ 表示以 $u$ 为根的子树中删了 $f_u$ 个点之后,$u$ ...

  3. [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】

    题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...

  4. [水题]ZOJ3038 Triangle War II

    题意: 给了这样一张图 有两种状态:pushed(*)和unpushed(.)    为方便起见分别成为 开 和 关 改变一个点的开关状态 会同时改变与它相邻的点的开关状态  比如改变5,则2.3.4 ...

  5. Java集合ArrayList的应用

    /** * * @author Administrator * 功能:Java集合类ArrayList的使用 */ package com.test; import java.io.BufferedR ...

  6. Postman(API & HTTP请求调试插件)和Apizza fiddler

    http://blog.csdn.net/u011012932/article/details/51456263#comments

  7. RxJava开发精要6 – Observables组合

    原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...

  8. [Quick-x lua]CCLabel类数字变化动作

    之前写了个C++版本的,现在改成lua的, 两者原理是一样,但是动作的执行方式有些微区别 (因为lua无法继承CCActionInterval类,单纯使用lua的话无法调用action的update方 ...

  9. Hadoop源代码分析【IO专题】

    由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化.Hadoop并没有采用Java的序列化(因为Java序列化比较复杂,且不能深度控制),而是引入了它自己的系统. ...

  10. bzoj3503

    显然知道第一行就可以只道整个矩阵但n<=40,搜索是不行的,我们设第一行为x1~xm可以由轻易由第一行未知数推出第n+1行,这一步我们可以压成二进制位(因为只和奇偶有关)显然n+1行必须是0,由 ...