TCP连接限制问题总结
- 最大TCP连接数量问题总结
- 1、可用端口号限制
- 2、文件描述符限制
- 3、线程的限制
- 4、内存的限制
- 5、CPU的限制
- 总结
- 参考文献:
最大TCP连接数量问题总结
直接上答案
最大TCP连接数量限制有:可用端口号数量、文件描述符数量、线程、内存、CPU
1、可用端口号限制
Q:一台主机可以有多少端口号?端口号与TCP连接?是否能修改?端口号限制因素?
第一:端口号是16位的,所以总共有65535个,即可创建65535个TCP连接
第二:端口分为知名端口(0~1023)
、注册端口(1024~49511)
、动态/私有端口(49152~65535)
第三:端口数可以修改。
//查看当前主机可用端口范围
[root]# cat /proc/sys/net/ipv4/ip_local_port_range
1024 65000
修改:vim /etc/sysctl.conf
,对这个文件进行修改,只需在sysctl.conf文件中添加一行记录即可。
如:
//新增100个可用端口:60000~60099
net.ipv4.ip_local_port_range = 60000 60099
2、文件描述符限制
每建立一个TCP连接,操作系统就得分配一个文件描述符,linux 对可打开的文件描述符的数量分别作了三个方面的限制。
系统级:当前系统可打开的最大数量,通过 cat /proc/sys/fs/file-max
查看
用户级:指定用户可打开的最大数量,通过 cat /etc/security/limits.conf
查看
进程级:单个进程可打开的最大数量,通过 cat /proc/sys/fs/nr_open
查看
[root ~]# cat /proc/sys/fs/file-max
100000
[root ~]# cat /proc/sys/fs/nr_open
100000
[root ~]# cat /etc/security/limits.conf
...
* soft nproc 100000
* hard nproc 100000
修改: 可修改单个进程最大文件描述符限制
//修改单个进程可打开的最大文件描述符限制为100
echo 100 > /proc/sys/fs/nr_open
3、线程的限制
C10K问题: 当服务器连接数达到 1 万且每个连接都需要消耗一个线程资源时,操作系统就会不停地忙于线程的上下文切换,最终导致系统崩溃。
传统的多线程并发模型:一个TCP连接就需要创建一个线程
I/O多路复用
解决: 不使用传统的多线程并发模型,而采用I/O多路复用技术
4、内存的限制
TCP连接数过大可能会出现: ERROR: out of memory
,即内存溢出。
原因:每个TCP连接本身,以及这个连接所用到的缓冲区,都是需要占用一定内存的,现在内存已经被占满了,不够用了就会报这个错。
5、CPU的限制
每个TCP连接都是需要占用CPU资源的,若占用CPU资源过多,则会导致死机,用户啥也干不了,然后就重启了,TCP连接也就全没了。
总结
参考文献:
[1] 最多能创建多少个TCP连接 [2] 你管这玩意叫IO多路复用