放开了去的 ulimit
.. note::
离离原上草,一岁一枯荣。
白居易《草 / 赋得古原草送别》
ulimit简介
对于高并发或者频繁读写文件的应用程序而言,有时可能需要修改系统能够打开的最多文件句柄数,否则就可能会出现too many open files的错误。
而句柄数分为系统总限制和单进程限制。可以使用ulimit -n
来查看系统对单个进程的限制及可以打开的文件数目。
或者执行ulimit -a
来查看所有的详细信息。
临时修改打开文件数目
对于临时的修改而言,可以终端中输入下面的命令,将该值调整为65536.
1 | $ ulimit -HSn 65535 |
上面的命令将open files修改为65535,不过退出当前shell后即失效。
H和S分别表示硬限制和软限制
永久修改
如果希望永久修改,需要修改配置文件 /etc/security/limits.conf
,修改后需要重新启动系统。
1 | * soft nofile 65535 |
其中的*表示所有的用户,soft和hard分别表示软硬限制,nofile表示能够打开的最大文件数,第四列为具体的值。其中具体的值有一个上次,在文件/proc/sys/fs/nr_open
,默认为1048576,完全够用了。
系统总打开句柄限制
上面讨论的均为单个线程的限制,属于线程级别的,系统级别的限制在文件/proc/sys/fs/file-max
文件中。
修改这个文件也是临时生效的,重启失效,如果希望永久生效,需要修改下面文件:/etc/sysctl.conf
可以添加下面这行
1 | fs.file-max = 6815744 |
然后运行sysctl -p
或者重启生效。可以通过lsof -p PID
来查看单个进程打开的文件句柄