技术解析

游戏在线到 1000 人左右,就无法再登录了。连接的时候提示无法连接。
0
1975-02-25 08:23:39
idczone

系统: centos 6.5 64 位 游戏语言: lua & C++

问题表现: 游戏在线到 1000 人左右,就无法再登录了。连接的时候提示无法连接 然后,游戏对应的端口,例如是 10000 ,在 zabbix 下会报警端口连不上,但实际用 netstat -plnt |grep 10000 是可以看到端口和进程的。 zabbix 的端口检测机制如下: nc -z -w 2 127.0.0.1 10000 如果$?返回不为 0 ,则报警说连不上了。 PS: 但最恶心的是,在测试服用机器人模拟登录,可以超过 1200 人以上。。.

已检查过的配置: 游戏内存, CPU ,网络都足够,没有瓶颈

/etc/security/limits.conf /etc/security/limits.d/90-nproc.conf /etc/sysctl.conf --也已检查 fs.file-max = 180000

用来设定整体 TCP 内存的整体使用状况 net.ipv4.tcp_mem = 94500000 915000000 927000000

TCP 连接上的读缓存上限 net.ipv4.tcp_rmem = 10240 87380 12582912

TCP 连接上的写缓存上限 net.ipv4.tcp_wmem = 10240 87380 12582912

发送套接字缓冲区大小的默认值(以字节为单位 net.core.wmem_default = 8388608

接收套接字缓冲区大小的默认值(以字节为单位) net.core.rmem_default = 8388608

接收套接字缓冲区大小的最大值 net.core.rmem_max = 16777216

发送套接字缓冲区大小的最大值 net.core.wmem_max = 16777216 ulimit 也已修改:

求问:到底还有哪里的系统配置问题导致游戏端口连不上呢? 而且,确认是系统的问题,游戏配置是 OK 的。


有相关报错么? 比如服务端和客户端 socket 返回的错误码之类的?

看 syslog 有没有错误。我觉得是 max open file limit 。

话说你有没有看下,数据库连接数限制捏

有可能是网络问题

第一眼觉得是不是连接限制。。。。。

端口用光了?

想知道是什么游戏

明显是 open file limit

netstat -s

但最恶心的是,在测试服用机器人模拟登录,可以超过 1200 人以上,这个是不是说明还是线上服务器配置有问题?

外部和内部局域网分别测试端口是否能正常连接,以确认是系统配置性问题还是网络问题。
如果是网络问题咨询下网络提供商是否上层有网络防火墙或者其他安全设备造成影响。

ulimit -a 看看 max open files

cat /proc//limits 看看再说

有没有人能把 limit.conf 的调优好好讲讲,现在感觉一顿蒙逼

这个运维比较懂,经验文档一大把,开发一般不太关心

返回了这个: errno=2,errmsg=No such file or directory

不是,这个也木有问题。查过了。 ulimit -n 为 65535

数据库 OK ,连接数也是正常的。

但不清楚是哪里的。。。

不是不是。

怎么看端口有没有用光?

呃,一个小手游

不是不是。

两个机器配置是一样的。都一套脚本初始化的。

这个也看了,也是正常的。

确认了不是网络的问题,是云服务器,已连进来有游戏了,但就是会突然又断开这样。

试试 setrlimit ,需要 root 权限

之前做过单机 100w 的长链接实践,大概的经验是这样的:
不使用 setrlimit ,单进程可以接收的连接数是突破不了 65K ,这个时候可以用多进程解决。主进程 listen , fork 出多个子进程 accept ,靠进程数来突破连接数限制。
另一种使用 setrlimit ,但需要 root 权限。
此外还要注意,整个系统总 fd 数的限制。

感觉一样
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服