文章出處

       心跳超時指的是:針對某個在線的客戶端(TCP連接),ESFramework服務端在指定的時間內,沒有收到來自該客戶端的任何消息,則認為該客戶端已經掉線。

       為什么需要心跳機制了?因為針對某些客戶端掉線(可能是因為網絡斷開、或客戶端程序退出),服務端不能立即感受到(有的可能需要過很長的時間才能感受到),所以,需要引入心跳機制,讓服務端盡可能早地發現客戶端已經不在線了。關于心跳機制,更詳細的介紹可以參見這里

        如果發生了很多客戶端批量心跳超時掉線的情況,就說明服務端在過去的某段時間內,從未收到來自這些客戶端的任何心跳消息。通常有3種可能性導致該情況發生:

1.CPU或內存使用率過高

       在該情況發生時,觀察一下服務端進程的CPU和內存是否有異常。

       比如,當CPU持續在100%時,就有可能導致接收數據的操作被停止。

2.處理某些信息所花費的時間過長

        如果服務端的信息處理模型設定的是IocpDirectly,那么依據IocpDirectly的原理,當處理某個信息所花費的時間超過了服務端設定的心跳超時的時間,服務端就會將對應的客戶端誤判為心跳超時掉線。

        假設是該原因導致的心跳超時,則對應的解決方案有:

(1)找出那些處理非常耗時的信息,進行優化理,加快處理速度。

(2)將超時時間間隔設定位一個更大的值或關閉心跳檢測。

(3)將信息處理修改為異步模式。

(4)將服務端信息處理模型修改為TaskQueue模式,這樣就完全避免了由于信息處理時間過長導致誤判的情況。

        很顯然,方案(1)是最好的也是根本性的解決方案。 

3.服務器網絡拓撲結構、防火墻、路由器、網絡安全監控等相關軟硬件

        如果排除了前面的可能性(比如,即使改成了TaskQueue模式,批量掉線仍然發生),那么,幾乎就只剩下一個可能:服務端在心跳超時時間間隔內未收到來自這些客戶端的任何消息。很可能來自客戶端的消息被防火墻、路由器、或某些網絡完全監控的相關軟硬件給擋住了。

        此時,需要專業的運維人員或網管人員參與進來,協助排查問題,比如:

(1)在服務器上執行netstat命令,查看目標端口的相關狀態信息。

(2)在服務器上執行抓包工具,監測目標端口上是否有數據從客戶端過來。

(3)分析服務器的網絡拓撲結構,并以服務器為中心,依次向外檢查防火墻、路由器、網絡安全監控等相關軟硬件等的設定,并進行針對性的排查測試。

 

      經過以上的排查分析,應該都可以找到問題的根源所在,如果還是沒有結果,可以給我留言,我們一起討論下啊。    

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()