關於心跳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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM