1. 程式人生 > >關於心跳ajax請求pending狀態(被掛起),stalled時間過長的問題。涉及tcp連接異常。

關於心跳ajax請求pending狀態(被掛起),stalled時間過長的問題。涉及tcp連接異常。

.net section 解決 5.1 網絡問題 chrome瀏覽器 time iou 數據包

環境:景安快雲服務器(聽說很垃圾,但是公司買的,我也剛來),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

文章描述了種種原因,就列出了一種,並貼出了相關的抓包圖,我一對比,發現跟我的幾乎一樣,但是我看不懂各個信息的真正意思,所以也只能估計就是這個原因

技術分享圖片

文中的抓包圖:

技術分享圖片

我的抓包圖:

技術分享圖片

這張圖全是錯誤,但是我都看不懂。

技術分享圖片

好,總結一下,以上就是我解決問題的過程,大牛們做個參考,我現在想知道,這個問題到底出在哪一端,好有個交代。

關於心跳ajax請求pending狀態(被掛起),stalled時間過長的問題。涉及tcp連接異常。