linux普通用户tcp最大连接数查询,如何测试Linux下tcp最大连接数限制详解

本文探讨了Linux服务器TCP并发连接数不受可用端口号限制,而是受制于系统可打开文件数。通过编写服务端epoll程序和客户端Go程序进行测试,发现最大连接数受限于系统参数如`ulimit -n`。测试结果显示,连接数最终卡在28232,可能因端口地址范围限制。epoll机制在高并发场景中的重要性得到体现。
摘要由CSDN通过智能技术生成

前言

关于TCP服务器最大并发连接数有一种误解就是“因为端口号上限为65535,所以TCP服务器理论上的可承载的最大并发连接数也是65535”。

先说结论:对于TCP服务端进程来说,他可以同时连接的客户端数量并不受限于可用端口号。并发连接数受限于linux可打开文件数,这个数是可以配置的,可以非常大,所以实际上受限于系统性能。

现在做服务器开发不加上高并发根本没脸出门,所以为了以后吹水被别人怼“天天提高并发,你自己实现的最高并发是多少”的时候能义正言辞的怼回去,趁着元旦在家没事决定自己写个demo搞一搞。

这个测试主要是想搞明白Linux下哪些参数配置限制了连接数的最大值,上限是多少。

一、先说下demo的思路:

服务端用epoll实现,就是简简单单的接收连接,然后客户端用go的goroutine,每个goroutine就是简单的建立连接,然后什么也不做。

上代码:

server:

/*

* g++ -o test_epoll ./test_epoll.c

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int SetReuseAddr(int fd)

{

int optval = 1;

socklen_t optlen = sizeof(optval);

return setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, optlen);

}

int main()

{

int fd = socket(AF_INET, SOCK_STREAM, 0);

int iRet = SetReuseAddr(fd);

if (iRet != 0)

{

printf("setsockopt for SO_REUSEADDR failed, error:%s\n", strerror(iRet));

return iRet;

}

struct sockaddr_in addr;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值