目前第二款游戏处于内部测试阶段,即将上线。今天广州那边的代理商反应,在他们公司内部使用WIFI连接游戏,部分手机可以访问,部分没有办法访问游戏,一直出现卡死状态。而我们公司内部却可以访问游戏。刚开始怀疑是给他们的包出错了,还有就是他们公司内部的网络问题。压根儿就没有想到最终的结果是服务器内核参数调整的问题。具体排除过程如下:

  1. 让公司内部运营人员和代理商那边再次确认客户端包的正确性,客户端包里包含有游戏服务器的router地址。

  2. 让代理商那边检查公司内部网络。通过浏览器访问router地址,确信是否会有返回值。

  3. 让代理商那边检查公司内部的WIFI设置状态,通过手机浏览器访问router地址,确实是否会有返回值。

  4. 联系代理商那边运维人员一起诊断。他们那边运维人员在排除他们公司内部网络问题后,建议查看游戏服务器的net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_tw_recycle 两个参数的设置情况。



由于服务器在由我接手之前是由第三方进行了初始配置。关于内核参数的调整也没有仔细查看。

我查看了下这两个参数的设置情况

net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1

他们将net.ipv4.tcp_tw_reuse 设置成了1。

net.ipv4.tcp_tw_reuse的值设为1 表示开启TCP TIME-WAIT sockets重用,允许将TIME-WAIT sockets重新用于新的TCP连接

net.ipv4.tcp_tw_recycle如果设为1表示启动TIME-WAIT 的快速回收


如果对这两个参数不是特别了解,不要随意修改这两个参数。将这两个参数都设置成为0后,代理商那边就可以登录游戏了。

net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0


修改这两个参数同时需要设置 

net.ipv4.tcp_timestamps = 0




Linux内核参数调整是一个很复杂的事情,必须对底层一些协议的工作原理了解得很清楚,才能够更加实际需要进行合理调整。




参考文章

http://coolshell.cn/articles/11564.html

http://blog.csdn.net/wireless_tech/article/details/6405755

https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

http://blog.csdn.net/gzh0222/article/details/8000508