ubuntu设置epoll最大连接数

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/youyudexiaowangzi/article/details/81122220

在ubuntu系统中写了一个epoll的测试程序,

windows端写了一个client,开启2000个线程,每个线程都与epoll测试程序建立连接,

结果epoll测试程序接收1015个连接之后,client的connect就返回错误10061,也就是WSAECONNREFUSED,被远端主机拒绝,即使没返回错误,send也会返回10054,也就是WSAECONNRESET,被远端主机强制关闭连接。

根据返回结果来看,是服务端程序,也就是epoll测试程序所在的系统系统拒绝了连接请求,可以内存明明够用,1015个连接未免太少,于是想办法增加服务端打开连接数,以前知道linux系统可能会限制打开文件数,所以查阅了一下,

执行命令

ulimit -a

可以查看当前系统所有限制

ulimit -n 30000

设置最大打开文件数为3万

注意,不要用一个终端测试epoll程序,一个终端,输入ulimit命令,因为该命令只是局部临时有效,(吃过亏,新开一个终端输入命令,看结果是改了,再原终端执行epoll程序,最大连接数还是1015)

一定要在当前在终端执行修改命令,然后在当前终端执行测试程序。client中把2000个线程改为8000个线程也毫无压力。

ulimit是局部临时生效,要永久生效就要修改配置文件

/etc/security/limits.conf

* soft nofile 65534
* hard nofile 65534

改为

root soft nofile 65534
root hard nofile 65534

不知为何非要指定用户

修改之后终端输入ulimit -a看到open files还是1024,sudo一下之后就变成65534了,可见是修改后直接生效,而之前修改的没有关闭的终端还是之前命令设置的值。

展开阅读全文

没有更多推荐了,返回首页