- 浏览: 285943 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- Tomcat (3)
- ZooKeeper (1)
- Maven (11)
- opensource (1)
- DataBase (5)
- UML (8)
- linux (87)
- Java (32)
- 算法 (3)
- Redis (1)
- HBase (2)
- 产品 (1)
- 模板引擎 (1)
- Eclipse (10)
- JUnit (5)
- Log4j (8)
- XML (2)
- JSON (1)
- SpringMVC (23)
- Spring (24)
- TCP/IP (4)
- Windows (10)
- Web Service (1)
- 源码版本管理 (1)
- Word (1)
- Test (1)
- Mybatis (7)
- CentOS (2)
- 多线程 (2)
- Web (7)
- Servlet (3)
- JavaWeb (4)
- MySQL (7)
- 汇编语言 (2)
- linux Shell (4)
- GIT (4)
- Python (1)
- 并发 (4)
- 编程通用 (1)
- JavaScript (1)
- 异常 (3)
- 自动化部署 (1)
- 大数据 (1)
- hive (2)
- 文本编辑器 (2)
- MINA (0)
- intellij IDEA (9)
- masm (0)
- blockchain (1)
- docker (2)
- IDEA (0)
- GO (3)
- nginx (1)
- springBoot (3)
- Websocket (2)
- macOS (1)
最新评论
-
woodding2008:
ss –pl 可以查看监听方式启动的端口以及pid
根据端口查PID,根据PID查进程名称 -
masuweng:
恩很试用,也很常用。
linux 常用命令
http://blog.csdn.net/kobejayandy/article/details/47127991
总结下服务端对于tcp连接的限制与提高tcp连接数的方法,可能工作中永远不会用到,但对于网络知识理解会有帮助。
1.服务端与16位的端口号(最大65535)没什么关系
服务端ip+port(监听端口) + 客户端ip+port 决定了一条连接,客户端连接服务器后,服务端并没有又分配一个物理端口与客户端连接。其实所有的数据还是通过监听端口接收与发送的(不论全双工与半双工,反正都是双工的),只不过多了一个逻辑上的socket。这些都应该是网卡上的事情,当接收到一个字节流的时候,网卡就会回调给操作系统,回调的时候会告诉操作系统客户端ip+port,假如是epoll模型,那么这次可能只接收了几个字节,回调那个新的socket的特定方法。然后下一次从监听端口回调上来的数据可能是另外的一个逻辑上的socket,各自互不影响。
2.内存限制
系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB)。一个tcb控制块大概要占用1k多的内存,假如百万连接,1个tcb占用1k内存,那么就需要1G的内存了,这还是理想情况,一般情况下tcb要大于1k内存。当每个连接上在有数据传输的时候,同时需要的内存就更大了。
另外需要设置的tcp参数有tcp的读写缓冲区,默认为86k,都可以改成4k。此外需要修改tcp_mem的值。
[ruby] view plain copy
tcp_mem(3个INTEGER变量):low, pressure, high
low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
high:允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出“TCP:
too many of orphaned sockets”。
3.文件句柄限制
每个socket都是一个文件句柄,Linux下文件句柄限制,包括linux允许的最大文件句柄,linux允许的最大同时活动的文件句柄。
4.网卡限制
千兆网卡,上限满负荷工作,大概有600兆左右,单位为b,除以8为75k/单个连接。这个一般可以满足。
参考http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html linux下需要修改的地方有:
[python] view plain copy
echo "* - nofile 1048576" >> /etc/security/limits.conf #open file resource limit 是linux中process可以打开的文件句柄数量。
echo "fs.file-max = 1048576" >> /etc/sysctl.conf #系统最大允许的文件描述符
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf #可以使用的端口范围,主要为了测试时候使用
echo "net.ipv4.tcp_mem = 786432 2097152 3145728" >> /etc/sysctl.conf #见上
echo "net.ipv4.tcp_rmem = 4096 4096 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 4096 16777216" >> /etc/sysctl.conf
在参考文章中,建立100w的连接,大概使用了7500M的内存,每个连接大概7.5k的内存(主要是读写缓冲区,tcb的大小)。
另外,通过修改系统配置达到100w连接并不难,但是要是真正实现并发100w业务的处理还是很困难的。
总结下服务端对于tcp连接的限制与提高tcp连接数的方法,可能工作中永远不会用到,但对于网络知识理解会有帮助。
1.服务端与16位的端口号(最大65535)没什么关系
服务端ip+port(监听端口) + 客户端ip+port 决定了一条连接,客户端连接服务器后,服务端并没有又分配一个物理端口与客户端连接。其实所有的数据还是通过监听端口接收与发送的(不论全双工与半双工,反正都是双工的),只不过多了一个逻辑上的socket。这些都应该是网卡上的事情,当接收到一个字节流的时候,网卡就会回调给操作系统,回调的时候会告诉操作系统客户端ip+port,假如是epoll模型,那么这次可能只接收了几个字节,回调那个新的socket的特定方法。然后下一次从监听端口回调上来的数据可能是另外的一个逻辑上的socket,各自互不影响。
2.内存限制
系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB)。一个tcb控制块大概要占用1k多的内存,假如百万连接,1个tcb占用1k内存,那么就需要1G的内存了,这还是理想情况,一般情况下tcb要大于1k内存。当每个连接上在有数据传输的时候,同时需要的内存就更大了。
另外需要设置的tcp参数有tcp的读写缓冲区,默认为86k,都可以改成4k。此外需要修改tcp_mem的值。
[ruby] view plain copy
tcp_mem(3个INTEGER变量):low, pressure, high
low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
high:允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出“TCP:
too many of orphaned sockets”。
3.文件句柄限制
每个socket都是一个文件句柄,Linux下文件句柄限制,包括linux允许的最大文件句柄,linux允许的最大同时活动的文件句柄。
4.网卡限制
千兆网卡,上限满负荷工作,大概有600兆左右,单位为b,除以8为75k/单个连接。这个一般可以满足。
参考http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html linux下需要修改的地方有:
[python] view plain copy
echo "* - nofile 1048576" >> /etc/security/limits.conf #open file resource limit 是linux中process可以打开的文件句柄数量。
echo "fs.file-max = 1048576" >> /etc/sysctl.conf #系统最大允许的文件描述符
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf #可以使用的端口范围,主要为了测试时候使用
echo "net.ipv4.tcp_mem = 786432 2097152 3145728" >> /etc/sysctl.conf #见上
echo "net.ipv4.tcp_rmem = 4096 4096 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 4096 16777216" >> /etc/sysctl.conf
在参考文章中,建立100w的连接,大概使用了7500M的内存,每个连接大概7.5k的内存(主要是读写缓冲区,tcb的大小)。
另外,通过修改系统配置达到100w连接并不难,但是要是真正实现并发100w业务的处理还是很困难的。
发表评论
-
libssl.so.10: cannot open shared object file: No such file or directory
2018-08-15 14:49 3881yum 安装不管用了,先执 ... -
sed 字符串替换
2018-04-03 19:15 787https://www.cnblogs.com/linux- ... -
连接到Hyperledger的docker容器内部
2018-03-12 21:02 852=============================== ... -
apt-get常用命令及工作原理
2018-03-12 20:17 483http://blog.csdn.net/mosquito_z ... -
Linux Shell 通配符、转义字符、元字符、特殊字符
2017-01-13 18:50 1664一、Linux shell通配符(wildcard) 通配 ... -
单机最大tcp连接数
2016-12-28 13:50 526from: http://www.cnblogs.com/my ... -
linux后台运行和关闭、查看后台任务
2016-12-15 17:09 665from: http://www.cnblogs.com/k ... -
sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
2016-12-15 17:07 406from http://myswirl.blog.163 ... -
Shell 脚本
2016-12-12 15:22 7961 如何在shell脚本中判断文件或者文件夹是否存在? if ... -
CentOS7 安装python 命令 : yum install python
2016-12-09 17:53 872CentOS7 安装python 命令 : yum insta ... -
linux 目录下的文件个数
2016-12-07 12:44 453linux里没有直接的命令来展示一个目录下的文件个数,可以通过 ... -
grep -v grep
2016-12-06 11:18 1107grep -v <**> <filename ... -
IT技术学习指导之Linux系统入门的4个阶段
2016-12-05 22:36 481http://www.cnbeta.com/articles ... -
Linux 命令參數帶&符合,需要轉義 \
2016-12-04 21:38 418比如新建文件夾 aaa&bbb 命令 mkd ... -
Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
2016-12-04 21:35 795一、& 放在启动参数后面表示设置此进程为后台进程 ... -
CentOS 7.0 安装中文输入法
2016-12-04 00:33 517安装的时候没有设置,现在找到之后记录下: (我这个是 ... -
Linux下常用压缩格式的压缩与解压方法
2016-12-02 22:25 461日期:2005-01-20 来源: LinuxByte ... -
Shell脚本8种字符串截取方法总结
2016-12-02 19:56 449这篇文章主要介绍了Shell脚本8种字符串截取方法总结,每个方 ... -
CentOS 7自动以root身份登录gnome桌面
2016-11-29 18:31 2141from: http://blog.csdn.net/zd ... -
deb to rpm ; rpm to deb
2016-11-29 10:21 615deb后缀的软件包是for Debian系的(包括Ubuntu ...
相关推荐
关于TCP服务器最大并发连接数有一种误解就是“因为端口号上限为65535,所以TCP服务器理论上的可承载的最大并发连接数也是65535”。 先说结论:对于TCP服务端进程来说,他可以同时连接的客户端数量并不受限于可用端口...
本文详细介绍了 Linux下tcp并发服务器的几种设计的模式套路,包含差异等比较,实例等 具体有 1,单进程,单线程模式,2,多进程模式,…… 相信看了一定受用!
多种tcp并发服务的设计程序的模式 ,可以作为入门开发的参考例子
linux socket tcp大并发 epoll使用教程 有关epoll的一切
在linux等系统下实现并发服务器与客户端通讯
Linux TCP并发服务器与客户端编程
Linux 下tcp 连接迁移技术
Linux下tcp并发服务器的几种设计的模式套路
连接打印机时提示:打印机超过最大连接数限制 下载后按文件里的方法做就能解决问题
linux下的TCP协议及使用,关于套接字的创建,及高并发服务器的创建
本文是关于 linux TCP服务器连接时发不出数据 。
非常好的一个模拟tcp并发,在有限硬件里模拟出大并发的网络环境测试,是学习网络和tcp开发的绝好例子!
在Linux设备上安装tcpreplay包回放工具
Linux TCP IP 协议栈分析Linux TCP IP 协议栈分析Linux TCP IP 协议栈分析
在Linux系统如何修改TCP连接数,文件数限制修改、网络端口限制修改;修改用户进程可打开文件数限制;修改网络内核对TCP连接的有关限制;使用支持高并发网络I/O的编程技术
linux tcp 内核 优化 网络,本文档对linux的tcp优化参数做了详尽的说明。很不错,值得收藏,以便日后备用。
Linux设备TCP连接曝高危漏洞 只要接入网络就可能被攻击.pdf
Linux平台下的基于TCP/IP协议的UDP服务器,同样只实现简单通信,C/S架构,支持并发连接。
tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接...
c# tcp 基于完成端口开发 高性能 高并发 吞吐量大 包含服务端 客户端完整代码 支持最大连接数支持65535个长连接