linux对进程的打开文件数是有限制的
错误原因
Linux默认打开文件1024,对于并发量大的无法满足要求;
(1)查看系统设置
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 253951
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 253951
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
通过以上命令,我们可以看到open files 的最大数为1024
对于并发量比较大的网站这个限制是有些捉襟见肘的
(2)解决方法
通过这个命令
ulimit -n 4096
把打开文件数的上限设为了4096,这下好了,项目又稳定了
但是,ulimit -n 4096 命令只能临时的改变open files 的值,当重新登陆后又会恢复,所以需要永久设置open files 的值。
很多系统上限可以通过修改/etc/security/limits.conf文件改变,这个文件有详细的注释,对如何修改做了说明。如果希望把所有用户的进程打开文件上限改为65536,可以加入下面两行
* soft nofile 65535
* hard nofile 65535
其中,*表示所有用户,soft/hard表示软/硬限制,还可以只真对某个用户或某个组做修改,具体方法参见文件注释。修改后需要重新启动系统才能生效
3.涉及命令
ulimit -a 显示当前所有的 limit 信息
ulimit -n 可以打开最大文件描述符的数量
ulimit – n 4096;限制最大可以使用 4096个文件描述符