linux下遇到服务器的网络连接限制数为1024个的原因及修正
利用Boost::asio写了一个TCP服务器,测试并发数量,发现超过1024个连接就会失败。一开始怀疑asio库的原因(查看了asio的win_fd文件,发现其超过1024个文件描述符之后,会再动态增加512个文件描述符),后来发现是由于linux的资源限制,linux的默认资源限制为进程只能打开1024个文件描述符,由于socket连接也是文件描述符表示的,所以超过1024个连接就无法再建
利用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)