关于 ulimit 和文件句柄数量限制
文章目录
有关 Linux 下 ulimit 和文件句柄数量的笔记。
ulimit 的基本印象
反复用 Open 来打开文件,会提示出一个文件句柄错误:
<pre class="example">open64
: Too many open files
<p>
这是因为 Linux 的 Open 函数会有一个<a href="http://starsliao.blog.163.com/blog/static/890482010101812220232/">句柄上限</a>:包括软上限和硬上限。
</p></p>
注意细节
对于 ulimit 里做的限定,是指进程同时打开的句柄数量,而不是累加的。
<p>
所以,我们需要在程序里及时关闭不需要的句柄。
</p>
<p>
fopen 及 socket 通讯的 accept 等,都会增加 ulimit 里的文件句柄数量。
</p></p>
基本 ulimit 值
其实 ulimit 命令本身就有分软硬设置,加 -H 就是硬,加 -S 就是软。硬上限和软上限的区别是:硬限制是实际的限制,而软限制是 warnning 限制,只会做出 warning。
<p>
你可以用 ulimit 命令来对这些变量进行查询与修改。比如说,我如果要查询 open 文件句柄的软上限,可以用命令:
</p>
<pre class="src src-shell-script">$ ulimit -Sn
<p>
要查询 open 文件句柄的硬上限,可以用命令:
</p>
<pre class="src src-shell-script">$ ulimit -Hn
<p>
我们可以用 ulimit -a 来查看所有限制值:
</p>
<pre class="src src-shell-script">$ ulimit -a
<p>
在 Linux 下面部署应用的时候,有时候会遇上
</p>
<pre class="example">Socket/File: Can't open so many files
<p>
的问题,其实就是 Linux 是有文件句柄限制的,而且默认不是很高,一般都是1024。作为一台生产服务器,其实很容易就达到这个数量,因此我们需要把这个值改大一些。
</p>
<p>
如果需要临时修改这个值,可以用下面的命令来使得 open 打开的文件句柄硬上限为 9999:
</p>
<pre class="src src-shell-script">$ ulimit -SHn 9999
<p>
可以使用下面的设置来使得文件句柄的软上限为 2048:
</p>
<pre class="src src-shell-script">$ ulimit -SSn 2048
开机启动设置 ulimit 值
如果你需要在开机的时候,就自动设置 ulimit 的值,可以使用下面的方法,在 Ubuntu 下的方法可以查看这里。简单来讲,是这样简单的几个步骤:
<p>
可以修改下面的配置:
</p>
<pre class="example">/etc/security/limits.conf
<p>
修改下面两项:
</p>
<pre class="example">* hard nofile 65535
- soft nofile 65535
文章作者 cookwhy
上次更新 2014-02-20