epoll的端口数量限制解决方法
epoll的端口数量限制
最近看了一些关于epoll的资料,看到epoll可以处理10万级的socket描述符,但是系统可以分配的端口号不是不会超过65535吗?所以对这个10万个socket描述符有点困惑。比如说一个im服务器,抛开其他的限制不说,im服务器最多能同时处理的客户端数量不会超过65535吧?
资料的是这样描述的:
epoll 的优点
支持一个进程打开大数目的socket描述符(FD)
select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完美的方案。不过 epoll则没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。
------解决方案--------------------
参考这个帖子
http://bbs.****.net/topics/390429343
------解决方案--------------------
一个TCP连接的表示[源IP, 源port, 目的ip, 目的port]
最近看了一些关于epoll的资料,看到epoll可以处理10万级的socket描述符,但是系统可以分配的端口号不是不会超过65535吗?所以对这个10万个socket描述符有点困惑。比如说一个im服务器,抛开其他的限制不说,im服务器最多能同时处理的客户端数量不会超过65535吧?
资料的是这样描述的:
epoll 的优点
支持一个进程打开大数目的socket描述符(FD)
select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完美的方案。不过 epoll则没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。
------解决方案--------------------
参考这个帖子
http://bbs.****.net/topics/390429343
------解决方案--------------------
一个TCP连接的表示[源IP, 源port, 目的ip, 目的port]