如果要支持百万长连接,需要有很多的工作要做
操作系统
首先就是要突破操作系统的限制。
在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个Socket句柄,每个socket句柄也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的句柄数限制:
ulimit -n
1024
这表示当前用户的每个进程最多允许同时打开1024个句柄,这1024个句柄中还得出去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通讯程序最多允许同时1014个TCP并发连接对于想支持更高数量的TCP并发连接的通讯处理程序,就必须修改Linux对当前用户进程同时打开的文件数量,修改单个进程打开最大文件数限制的最简单的办法就是使用ulimit命令:
ulimit -n 1000000
如果系统回显类似于"Operation not permitted"之类的话,说明上述限制修改失败,实际上是因为指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制,因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制.
软限制(soft limit):是指Linux在当前系统能够承受的范围内进一步限制一个进程同时打开的文件数;
硬限制(hard limit):是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量.
第一步:修改/etc/security/limits.conf文件,在文件中添加如下行
* soft nofile 1000000
* hard nofile 1000000
'*'号表示修改所有用户的限制;
soft 和hard为两种限制方式,其中soft表示警告的限制,