对于一台服务器来说,支撑千万并发连接是一个挑战,我们来看看有哪些限制,并且如何解决
首先是内存问题,默认设置下,系统为每个tcp连接分配4k的rmem和4k的wmem,那么一个连接需要8k的内存,1kw连接需要80G内存。
修改系统的这两个配置,改为1k的rmem和wmem,则需要的内存为20G,实际使用中还会有其他的内存开销,因此最好准备32G或更大的内存
sysctl -w net.ipv4.tcp_rmem=4096
sysctl -w net.ipv4.tcp_wmem=4096
然后是文件描述问题,系统允许打开的文件数是有限制的,默认值很小,应当修改
sysctl -w fs.file-max=10485760
还有单进程的文件数量限制,这个最大值只能到1048576,应当修改
echo ‘* soft nofile 1048576’ >> /etc/security/limits.conf #用户单进程的最大文件数,用户登录时生效
echo ‘* hard nofile 1048576’ >> /etc/security/limits.conf #用户单进程的最大文件数,用户登录时生效
ulimit -n 1048576 #用户单进程的最大文件数 当前会话生效
由于一个进程最多能够打开100w个文件,因此需要多进程来支持千万连接,因此server需要运行多个服务器进程。