linux下遇到服务器的网络连接限制数为1024个的原因及修正

来源:互联网 发布:mac 系统 修改用户名 编辑:程序博客网 时间:2024/06/05 15:26

利用Boost::asio写了一个TCP服务器,测试并发数量,发现超过1024个连接就会失败。

一开始怀疑asio库的原因(查看了asio的win_fd文件,发现其超过1024个文件描述符之后,会再动态增加512个文件描述符),后来发现是由于linux的资源限制,linux的默认资源限制为进程只能打开1024个文件描述符,由于socket连接也是文件描述符表示的,所以超过1024个连接就无法再建立socket连接了。


但是实际上由于linux系统资源的限制,会导致达到最大连接数,从而不能再创建新的连接了。


linux的资源可以通过如下方法查看ulimit -a查看所有的资源限制


通过ulimit -n我们发现

输出为1024,说明当前系统限制为1024个文件描述符。

临时改变文件ulimit -n 10240设置为10240个文件描述符,发现连接数可以达到10240。

永久改变的方法:

1、修改/etc/security/limit.conf

      添加如下内容:

      *   soft noproc 123414    #*表示针对所有用户,noproc是针对进程数量的限制,soft表示软限制,软限制永远小鱼硬限制。

      *   hard noproc 1231412   # hard表示硬限制

      *   soft nofile  12347   #nofile 表示针对打开文件数量进行设置

      *   hard nofile 12314124   #hard为硬限制

2、修改/etc/pam.d/login

      添加如下一句话:session required  /lib/security/pam_limits.so

3、确保/etc/pam.d/system_auth文件中,有如下内容,session  required  /lib/security/$ISA/pam_limits.so

这样每次登录终端,限制就会改变了。

阅读全文
0 0