当前位置: 首页 > news >正文

TCP最大连接数问题总结

  最大TCP连接数量限制有:可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源,如图所示:
在这里插入图片描述

1、可用端口号限制

Q:一台主机可以有多少端口号?端口号与TCP连接?是否能修改?端口号限制因素?

第一:端口号是16位的,所以总共有65535个,即可创建65535个TCP连接

第二:端口分为知名端口(01023)、注册端口(102449511)、动态/私有端口(49152~65535)

第三:端口数可以修改。

//查看当前主机可用端口范围
[iot]$ 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查看

[iot ~]$ cat /proc/sys/fs/file-max
100000
[iot ~]$ cat /proc/sys/fs/nr_open
100000
[iot ~]$ 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多路复用 :一个线程可以管理多个 TCP 连接的资源

解决: 不使用传统的多线程并发模型,而采用I/O多路复用技术

4、内存的限制

  TCP连接数过大可能会出现: ERROR: out of memory ,即内存溢出。

**原因:**每个TCP连接本身,以及这个连接所用到的缓冲区,都是需要占用一定内存的,现在内存已经被占满了,不够用了就会报这个错。

5、CPU的限制

  每个TCP连接都是需要占用CPU资源的,若占用CPU资源过多,则会导致死机,用户啥也干不了,然后就重启了,TCP连接也就全没了。

6、总结

资源一台Linux的资源一个TCP占用资源占满的结果
CPU看你花多少钱买的看你用它干嘛电脑卡死
内存看你花多少钱买的取决于缓冲区大小OOM
临时端口号ip_local_port_range1cannot assign requested address
文件描述符fs.file-max1too many open files
进程/线程数ulimit -n看IO模型系统崩溃
http://www.lryc.cn/news/143345.html

相关文章:

  • 【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生
  • explain各个字段代表的意思
  • 【已解决】Windows10 pip安装报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x98
  • goland 中的调试器 -- Evaluate
  • 你知道公司内部维基到底有哪些功能吗
  • netdata监控服务器主机(包括Docker容器)
  • Mybatis学习|第一个Mybatis程序
  • 计算机网络MTU和MSS的区别
  • redis学习笔记 - 进阶部分
  • SE5 - BM1684 人工智能边缘开发板入门指南 -- 模型转换、交叉编译、yolov5、目标追踪
  • 基于Java+SpringBoot+vue前后端分离英语知识应用网站设计实现
  • vue使用vue-router报错
  • 编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。
  • js 类、原型及class
  • day-30 代码随想录算法训练营 回溯part06
  • txt、pcd、las、ply 格式点云基本的读写和显示 (附 python c++ 代码)
  • k8s节点pod驱逐、污点标记
  • 【项目 计网6】 4.17 TCP三次握手 4.18滑动窗口 4.19TCP四次挥手
  • 茶叶小笔记
  • 安全开发-JS应用NodeJS指南原型链污染Express框架功能实现审计WebPack打包器第三方库JQuery安装使用安全检测
  • Android JNI系列详解之CMake编译工具的使用
  • springboot中关于继承WebMvcConfigurationSupport后自定义的全局Jackson失效解决方法,localdate返回数组问题
  • LeetCode 面试题 02.03. 删除中间节点
  • Redis知识点总结
  • (四)k8s实战-服务发现
  • AxureRP制作静态站点发布互联网,内网穿透实现公网访问
  • [Go版]算法通关村第十四关白银——堆高效解决的经典问题(在数组找第K大的元素、堆排序、合并K个排序链表)
  • 『FastGithub』一款.Net开源的稳定可靠Github加速神器,轻松解决GitHub访问难题
  • 软件开发的201个原则 阅读笔记 第172-201个原则
  • vue 后台管理系统登录 记住密码 功能(Cookies实现)