1. 程式人生 > >伺服器效能瓶頸定位-網路

伺服器效能瓶頸定位-網路

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)其他原因