关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题。涉及tcp连接异常。

环境:景安快云服务器(听说很垃圾,但是公司买的,我也刚来),CentOS-6.8-x86_64,Apache,MySQL5.1,PHP5.3.

问题:现公司有一个php系统,需要重复向后台发送ajax请求,但是会出现pending状态,我现在需要解决这个问题,或者说找到问题在服务器,代码,还是客户端,然后有个交代,但是不知道从何下手,毕竟还是it萌新啊。。

效果如图。两个特点,1:就是越往后的请求,pengding时间越长,且其中绝大部分时间被stalled占用(此问题网上有相关文章,但是没有解决办法,我后文会贴出来);2:就是这个图我是设置的1s请求一次,一次又三个请求,如果设置的时间长一点比如7s,这个现象就会出现得迟。

我的解决过程: 程序员表示没想到回来解决这个问题。。。百度,谷歌。

我首先找到的有价值的文章是这篇:关于请求被挂起页面加载缓慢

链接: http://kb.cnblogs.com/page/513237/

文章的结论是,没有找到解决办法,但是大致描述了一个原因就是tcp连接的问题,而且跟chrome浏览器有关,关于socket这些,不是太了解,但是知道跟tcp握手有关。

好,大致文章说了跟chrome有关,于是我又下了火狐来测试,依然有这个问题,所以虽然这篇文章很好,可能跟我这个无关吧我想。

然后我又找到一篇文章:chrome的timeline中stalled问题解析 

链接:http://www.tuicool.com/articles/qQVj6nb

这篇文章的问题也和我差不多,耗时大部分在stalled,然后他通过抓包工具,证明是tcp的
连接出了问题,跟上文一样,然后结论是网络问题或者服务端问题。然后我也去下载了同样的抓包工具,出现得效果也差不多。

当然,如果是网络问题,我就有交代了,但是还有可能是服务端问题,因此还得继续找。

然后虽然我确实看不懂这个抓包工具里面的信息,不过明显的报错我还是能看出来,也就是 TCP Previous segment not captured,这个错误出现频率很高,我想这应该就是跟tcp链接异常有关的报错,因此我又找了相关的文章,找到了这篇:抓包分析之 “TCP Previous segment not captured”;

链接:https://my.oschina.net/moooofly/blog/804568

文章描述了种种原因,就列出了一种,并贴出了相关的抓包图,我一对比,发现跟我的几乎一样,但是我看不懂各个信息的真正意思,所以也只能估计就是这个原因

文中的抓包图:

tcp 连接关闭时由于协议栈bug导致的认为数据包丢失

我的抓包图:

这张图全是错误,但是我都看不懂。

好,总结一下,以上就是我解决问题的过程,大牛们做个参考,我现在想知道,这个问题到底出在哪一端,好有个交代。

                </section>
原文地址:https://www.cnblogs.com/jpfss/p/8963766.html