ulimit用于限制shell启动进程所占用的资源。其中ulimit -n用于限制进程能够打开的文件描述符的最大数目。因为任何设备在linux下都是文件,通信的接口也有专门的接口文件负责,所以linux下进程tcp链接的最大并发量也受限于该值。
l 修改方案
步骤一:通过命令修改进程能够打开的文件数目
ulimit -n <file_num> 此命令将进程能够打开的文件描述符的最大数目修改为file_num。
如:ulimit -n 102400
注:ulimit -n 命令可查看进程能够打开的文件描述符的最大数目。
如果步骤一执行失败,系统回显类似于“Operation notpermitted”之类的话,说明上述限制修改失败。是因为在<file_num>中指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制。因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制。此时需执行以下步骤。
步骤二:修改/etc/security/limits.conf文件,在文件中添加如下行:
user00 soft nofile 10240 修改系统对用户user00 的软限制(软限制是指限制用户同时打开的文件数目)
user00 hard nofile 10240 修改系统对用户user00 的软限制(硬限制是指系统根据硬件资源(主要指内存)计算出来的最多可打开的文件数目)
可用'*'号表示修改所有用户的限制;
通常软限制低于硬限制;
建议不要将软限制和硬限制修改过大。
步骤三:修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so
这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。
步骤四:查看Linux系统级的最大打开文件数限制,使用如下命令:
这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)800037个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。该值是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制,除非想为用户级打开文件数限制设置超过此限制的值。修改此硬限制的方法是修改/etc/rc.local脚本,在脚本中添加如下行:
echo 8000037 > /proc/sys/fs/file-max
这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为800037。
在此,可再执行步骤一,如仍不能打开期望的文件数目,执行步骤五。
步骤五:修改用户登录脚本中的ulimit -n命令
打开/etc/profile脚本文件,在文件中查找是否使用了ulimit-n限制了用户可同时打开的最大文件数量,如果找到,则删除这行命令,或者将其设置的值改为合适的值,然后保存文件,用户退出并重新登录系统即可。
通过上述步骤,就为支持高并发TCP连接处理的通讯处理程序解除关于打开文件数量方面的系统限制。
继续重新登陆,如出现登录的时候
ulimit: open files: cannot modify limit: Operation not permitted
还有的话,需要重启一下ssh
ps:如果你用的脚本或者其他的工具启动进程,请保证里面没有继承原来的设置