伺服器效能瓶頸定位-網路
阿新 • • 發佈:2019-01-08
1:原理篇
遊戲伺服器一般客戶端和伺服器通訊一般採用tcp協議,首先了解tcp頭結構:
圖來自TCP/Ip協議(第九章)
其中兩個欄位可以用於判斷當前客戶端和伺服器的網路情況.
(1) 4位資料偏移值,表示當前tcp包的大小.
(2) 兩位元組視窗大小, 表示當前tcp包傳送方接收緩衝區的大小.
我們知道tcp連線時全雙工的,當前socket能傳送的位元組受MSS和對方socket接受緩衝區大小影響,
根據以上知識,我們可以得出以下情況:
以下設計基於socket的接受緩衝區不是動態調整的,也就是tcp_window_scaling為0的情況.
(1)接收方接收緩衝區的大小足夠,TCP包的大小不能達到要傳送的大小.
可以判斷問題是傳送的資料小於接收方的處理能力.
可能原因:
(a)傳送方socket的傳送緩衝區大小設定問題.
(b)傳送方程式呼叫socket send有問題. 如果是偶爾出現這種情況,檢查是不是程式出現瞬卡的情況,比如程式迴圈, 鎖衝突.
(c)網路MSS太小,檢查機器以及交換機的設定.
(d)其他原因.
(2)接收方緩衝區的大小很小, 導致傳送方能傳送的包大小受限:
可以判斷問題是接收處理的速度小於傳送的資料.
可能原因:
(a)接收方socket的接受緩衝區大小設定問題.
(b)接收方程式IO 接收資料處理不夠快,如果是偶爾出現這種情況,檢查是不是接收方程式出現卡的情況,比如程式迴圈, 鎖衝突.
(c)這邊有種情況也會導致這種情況, 傳送方太頻繁,導致接收方的接收緩衝區被佔滿.(類似DDos攻擊)
(d)其他原因