故障排查:是什么 导致了客户端批量心跳超时掉线
? ? ? ?心跳超時指的是:針對某個在線的客戶端(TCP連接),ESFramework服務(wù)端在指定的時間內(nèi),沒有收到來自該客戶端的任何消息,則認(rèn)為該客戶端已經(jīng)掉線。
???????為什么需要心跳機制了?因為針對某些客戶端掉線(可能是因為網(wǎng)絡(luò)斷開、或客戶端程序退出),服務(wù)端不能立即感受到(有的可能需要過很長的時間才能感受到),所以,需要引入心跳機制,讓服務(wù)端盡可能早地發(fā)現(xiàn)客戶端已經(jīng)不在線了。關(guān)于心跳機制,更詳細(xì)的介紹可以參見這里。
??????? 如果發(fā)生了很多客戶端批量心跳超時掉線的情況,就說明服務(wù)端在過去的某段時間內(nèi),從未收到來自這些客戶端的任何心跳消息。通常有3種可能性導(dǎo)致該情況發(fā)生:
1.CPU或內(nèi)存使用率過高
?????? 在該情況發(fā)生時,觀察一下服務(wù)端進程的CPU和內(nèi)存是否有異常。
?????? 比如,當(dāng)CPU持續(xù)在100%時,就有可能導(dǎo)致接收數(shù)據(jù)的操作被停止。
2.處理某些信息所花費的時間過長
??????? 如果服務(wù)端的信息處理模型設(shè)定的是IocpDirectly,那么依據(jù)IocpDirectly的原理,當(dāng)處理某個信息所花費的時間超過了服務(wù)端設(shè)定的心跳超時的時間,服務(wù)端就會將對應(yīng)的客戶端誤判為心跳超時掉線。
??????? 假設(shè)是該原因?qū)е碌男奶瑫r,則對應(yīng)的解決方案有:
(1)找出那些處理非常耗時的信息,進行優(yōu)化理,加快處理速度。
(2)將超時時間間隔設(shè)定位一個更大的值或關(guān)閉心跳檢測。
(3)將信息處理修改為異步模式。
(4)將服務(wù)端信息處理模型修改為TaskQueue模式,這樣就完全避免了由于信息處理時間過長導(dǎo)致誤判的情況。
??????? 很顯然,方案(1)是最好的也是根本性的解決方案。?
3.服務(wù)器網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、防火墻、路由器、網(wǎng)絡(luò)安全監(jiān)控等相關(guān)軟硬件
??????? 如果排除了前面的可能性(比如,即使改成了TaskQueue模式,批量掉線仍然發(fā)生),那么,幾乎就只剩下一個可能:服務(wù)端在心跳超時時間間隔內(nèi)未收到來自這些客戶端的任何消息。很可能來自客戶端的消息被防火墻、路由器、或某些網(wǎng)絡(luò)完全監(jiān)控的相關(guān)軟硬件給擋住了。
??????? 此時,需要專業(yè)的運維人員或網(wǎng)管人員參與進來,協(xié)助排查問題,比如:
(1)在服務(wù)器上執(zhí)行netstat命令,查看目標(biāo)端口的相關(guān)狀態(tài)信息。
(2)在服務(wù)器上執(zhí)行抓包工具,監(jiān)測目標(biāo)端口上是否有數(shù)據(jù)從客戶端過來。
(3)分析服務(wù)器的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),并以服務(wù)器為中心,依次向外檢查防火墻、路由器、網(wǎng)絡(luò)安全監(jiān)控等相關(guān)軟硬件等的設(shè)定,并進行針對性的排查測試。
?
? ? ? 經(jīng)過以上的排查分析,應(yīng)該都可以找到問題的根源所在,如果還是沒有結(jié)果,可以給我留言,我們一起討論下啊。 ? ?
?
總結(jié)
以上是生活随笔為你收集整理的故障排查:是什么 导致了客户端批量心跳超时掉线的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C学习if条件判断和for循环
- 下一篇: spring 的配置 beanprope