Linux下高并发socket最大连接数所受的限制问题

转载 2015年11月21日 17:26:25

1、修改用户进程可打开文件数限制

在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:
[speng@as4 ~]$ ulimit -n
1024
这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听 socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数就只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通讯程序最多允许同时1014个TCP并发连接。
对于想支持更高数量的TCP并发连接的通讯处理程序,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hardlimit)。其中软限制是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。
修改上述限制的最简单的办法就是使用ulimit命令:
[speng@as4 ~]$ ulimit -n
上述命令中,在中指定要设置的单一进程允许打开的最大文件数。如果系统回显类似于“Operation notpermitted”之类的话,说明上述限制修改失败,实际上是因为在中指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制。因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制。
第一步,修改/etc/security/limits.conf文件,在文件中添加如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪个用户的打开文件数限制,可用’*'号表示修改所有用户的限制;soft或hard指定要修改软限制还是硬限制;10240则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。修改完后保存文件。
第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so
这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。
第三步,查看Linux系统级的最大打开文件数限制,使用如下命令:
[speng@as4 ~]$ cat /proc/sys/fs/file-max
12158
这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)12158个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制,除非想为用户级打开文件数限制设置超过此限制的值。修改此硬限制的方法是修改/etc/rc.local脚本,在脚本中添加如下行:
echo 22158 > /proc/sys/fs/file-max
这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为22158。修改完后保存此文件。
完成上述步骤后重启系统,一般情况下就可以将Linux系统对指定用户的单一进程允许同时打开的最大文件数限制设为指定的数值。如果重启后用 ulimit-n命令查看用户可打开文件数限制仍然低于上述步骤中设置的最大值,这可能是因为在用户登录脚本/etc/profile中使用ulimit -n命令已经将用户可同时打开的文件数做了限制。由于通过ulimit-n修改系统对用户可同时打开文件的最大数限制时,新修改的值只能小于或等于上次 ulimit-n设置的值,因此想用此命令增大这个限制值是不可能的。所以,如果有上述问题存在,就只能去打开/etc/profile脚本文件,在文件中查找是否使用了ulimit-n限制了用户可同时打开的最大文件数量,如果找到,则删除这行命令,或者将其设置的值改为合适的值,然后保存文件,用户退出并重新登录系统即可。
通过上述步骤,就为支持高并发TCP连接处理的通讯处理程序解除关于打开文件数量方面的系统限制。

原帖地址
http://www.chinaitlab.com/linux/administer/958961.html

Linux下高并发socket最大连接数所受的各种限制

1、修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个...
  • guowake
  • guowake
  • 2011年07月19日 08:10
  • 118739

查看linux中的TCP连接数

一、查看哪些IP连接物理
  • he_jian1
  • he_jian1
  • 2014年11月04日 16:46
  • 111557

修改linux最大socket连接数

在Linux下Epoll模式默认只支持1024个连接,所以我们要修改一下Linux系统可打开的最大描述符限制。 最简单的修改方法你 可以用ulimit -n 3000 把允许最大开打的描述符修改为30...
  • hzhsan
  • hzhsan
  • 2013年08月02日 14:51
  • 7647

设置Linux支持最大的SOCKET连接数量

在Linux下Epoll模式默认只支持1024个连接,所以我们要修改一下Linux系统可打开的最大描述符限制。最简单的修改方法你 可以用ulimit -n 3000 把允许最大开打的描述符修改为300...
  • zhukangle
  • zhukangle
  • 2017年02月20日 20:57
  • 767

Linux下高并发socket最大连接数所受的各种限制

1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统...
  • houyongqian88
  • houyongqian88
  • 2016年09月29日 09:30
  • 735

Linux下高并发socket最大连接数

http://soft.chinabyte.com/os/285/12349285.shtml (转载时原文内容做个修改)   1、修改用户进程可打开文件数限制   在Linux平台上,无论编写客...
  • dipolar
  • dipolar
  • 2016年01月28日 16:00
  • 1028

Linux下高并发socket最大连接数

1、修改用户进程可打开文件数限制   在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开 文件数量的限制(这是因为...
  • xiaomin1991222
  • xiaomin1991222
  • 2016年03月10日 16:05
  • 221

linux中socket的连接数

修改参数对应的句柄数 lsof | wc -l /usr/sbin/lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|grep 4935  最大句柄数 u...
  • sprita1
  • sprita1
  • 2015年02月10日 21:23
  • 867

CentOS下高并发socket最大连接数所受的各种限制

http://www.centoscn.com/CentOS/config/2013/1201/2175.html
  • sbwfgihc
  • sbwfgihc
  • 2013年12月02日 18:43
  • 1098

ubuntu linux 修改socket最大连接数,同时也是文件最大打开数

修改/etc/security /limits.conf 配置文件。 使用命令:sudo gedit /etc/security /limits.conf 在文件中增加 * soft nof...
  • zm_21
  • zm_21
  • 2014年05月27日 15:46
  • 4821
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下高并发socket最大连接数所受的限制问题
举报原因:
原因补充:

(最多只允许输入30个字)