Posted on 20-02-2014
Filed Under (技术) by waterlin

有关 Linux 下 ulimit 和文件句柄数量的笔记。

ulimit 的基本印象

反复用 Open 来打开文件,会提示出一个文件句柄错误:

open64
: Too many open files

这是因为 Linux 的 Open 函数会有一个句柄上限:包括软上限和硬上限。

注意细节

对于 ulimit 里做的限定,是指进程同时打开的句柄数量,而不是累加的。

所以,我们需要在程序里及时关闭不需要的句柄。

fopen 及 socket 通讯的 accept 等,都会增加 ulimit 里的文件句柄数量。

基本 ulimit 值

其实 ulimit 命令本身就有分软硬设置,加 -H 就是硬,加 -S 就是软。硬上限和软上限的区别是:硬限制是实际的限制,而软限制是 warnning 限制,只会做出 warning。

你可以用 ulimit 命令来对这些变量进行查询与修改。比如说,我如果要查询 open 文件句柄的软上限,可以用命令:

$ ulimit -Sn

要查询 open 文件句柄的硬上限,可以用命令:

$ ulimit -Hn

我们可以用 ulimit -a 来查看所有限制值:

$ ulimit -a

在 Linux 下面部署应用的时候,有时候会遇上

Socket/File: Can't open so many files

的问题,其实就是 Linux 是有文件句柄限制的,而且默认不是很高,一般都是1024。作为一台生产服务器,其实很容易就达到这个数量,因此我们需要把这个值改大一些。

如果需要临时修改这个值,可以用下面的命令来使得 open 打开的文件句柄硬上限为 9999:

$ ulimit -SHn 9999

可以使用下面的设置来使得文件句柄的软上限为 2048:

$ ulimit -SSn 2048

开机启动设置 ulimit 值

如果你需要在开机的时候,就自动设置 ulimit 的值,可以使用下面的方法,在 Ubuntu 下的方法可以查看这里。简单来讲,是这样简单的几个步骤:

可以修改下面的配置:

/etc/security/limits.conf

修改下面两项:

* hard nofile 65535
* soft nofile 65535 

© 2014, 浏忙大爆炸. All rights reserved.
除非注明,浏忙大爆炸文章均为原创,转载请以链接形式标明本文地址。

(0) Comments    (910) Views    Read More   
Post a Comment
Name:
Email:
Website:
Comments: