服务器性能瓶颈定位-网络

  • Post author:
  • Post category:其他


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



版权声明:本文为lufeipeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。