Linux 如何高并发socket TCP

本文探讨了在Linux环境下,客户端向服务器发起大量TCP连接时遇到的问题及解决方案。文章详细介绍了如何通过调整系统设置来提高单一进程同时打开的文件数量、栈大小及端口数的上限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试程序是这样的,在Linux环境下,客户端不断地向服务器发起TCP连接, 在系统默认情况下(前提是你的系统没有问题,并且没有更该系统配置),当客户端socket建立了1000多个后,会socket 失败!


原因在于,具体是说:单一进程同时打开文件数量(这里可以理解一个套接字就是一个文件)是有上限的!要受到系统的打开文件数量、栈大小、端口数 这三个的限制。以一个客户端向服务器发起5万条tcp连接为例, 在Linux系统中,系统默认最高可以发起1024个tcp, 这是远远不够的, 具体查看系统的打开文件数量、栈大小、端口数,输入以下命令


查看系统默认的打开文件数量上限:ulimit -n (一般是1024)
查看栈大小的上限:ulimit -s (一般是1024)
查看端口数的上限:cat /proc/sys/net/ipv4/ip_local_port_range(一般是32768 61000)




那么就需要修改上限,


修改打开文件数: ulimit -n 102400
修改栈大小:     ulimit -s 102400
修改端口数:     # echo "1025 65535" > /proc/sys/net/ipv4/ip_local_port_range




关于端口数再补充一点,研究发现,Linux对外的随机分配端口是由一定限制的,理论上单机对外的端口最大值为65535,除去一些保留端口和被占用端口外,也应该在6W左右,但实际上单机建立对外连接时,默认不超过28232个连接。
    执行以下命令就很清楚原因了:
    $ cat /proc/sys/net/ipv4/ip_local_port_range
输出结果为:
    32768   61000
    这就是Linux随机分配端口的范围,如果在该范围内有被占用的端口,那么连接数肯定小于28232.如果想更改这个范围,本地端口范围的最小值必须大于或等于1024;而端口范围的最大值则应小于或等于65535。可以执行以下命令:
    # echo "10000 65535" > /proc/sys/net/ipv4/ip_local_port_range
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值