LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1630|回复: 8

slackware 中如何增加打开文件的数目。 ulimit 的用法

[复制链接]
发表于 2008-10-12 21:08:38 | 显示全部楼层 |阅读模式
今天需要修改ulimit的数目,google.cn了一下。发现国内slackware这方面的很少。
有的一些都是错的。真是要命。
只好用英文的google,翻山越海,终于找到了。这里做个记号,同时也给需要的人,提供一个方便。

如果英文好请看原来的页面我在这也就是翻译而以。

ulimit 有两种限制,硬限制和软限制。
硬限制用下面的命令查看。
  1. ulimit -Hn
复制代码
软限制用下面的命令查看。
  1. ulimit -n
复制代码

默认的都是1024(10进制),硬限制是由内核指定的,软限制是由用户指定的。非特权用户(一般就是非root用户)
可以增加软限制[color="Red"](最大到硬限制),也可以降低硬限制,但是[color="Red"]不能增加硬限制。

关于这个问题,一个自然而然的想法是在/etc/profile中添加一行命令。但是这样是不行的。原因是普通用户无法增加硬限制的数量。

正确的做法是使用 [color="Red"]/sbin/initscript 脚本文件。这个脚本要有+x属性。
默认的系统里面只有一个example文件,你可以cp一下,再修改。
  1. PATH=/bin:/sbin:/usr/bin:/usr/sbin
  2. export PATH
  3. # Increase the hardlimit for open files
  4. ulimit -Hn 4096
  5. # Execute the program.
  6. eval exec "$4"
复制代码
上面就是一个修改好的,主要是"ulimit -Hn 4096", 这个命令。你可以注释掉一些不用的。
这个时候硬限制已经修改好了,但是软限制没有还没有修改。
可以在 /etc/profile的最后加一个"ulimit -n 2048"

重启,用ulimit查看就好了。

最后要提示一下 ulimit -n 后面的数量一定要是1024的倍数,也可以用16进制来表示(0x400=1024).
具体ulimit的用法,请 man bash,然后搜索 ulimit。


ginkgo
发表于 2008-10-12 21:17:50 | 显示全部楼层
...汗一个,什么叫“增加打开文件的数目”?
回复 支持 反对

使用道具 举报

发表于 2008-10-13 09:06:37 | 显示全部楼层
在什么情况下,才会有打开这么多文件的情况呢?
回复 支持 反对

使用道具 举报

发表于 2008-10-13 10:14:58 | 显示全部楼层
同问:同楼上的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-13 12:52:04 | 显示全部楼层
Post by sunny_5252;1893314
在什么情况下,才会有打开这么多文件的情况呢?


装oracle 数据库的时候,用ibm 的 RAD , RSA 的时候。
回复 支持 反对

使用道具 举报

发表于 2008-10-13 13:44:28 | 显示全部楼层
这样啊。。。没碰到过,没用过Oracle。
回复 支持 反对

使用道具 举报

发表于 2008-10-13 16:51:27 | 显示全部楼层
楼主在Slackware上跑Oracle是测试机还是生产机?还是仅仅作为开发使用?
回复 支持 反对

使用道具 举报

发表于 2009-6-5 09:14:31 | 显示全部楼层
比如需要用squid的时候加这个数字会使程序提供更好的并发性。apache、nginx等同理。
回复 支持 反对

使用道具 举报

发表于 2009-6-5 09:30:11 | 显示全部楼层
其实too many open files问题还是经常会遇到的,尤其是和Java相关。不仅仅是Oracle DB,还有Application Server,比如WebLogic Server安装配置过程中也会有这个问题。

ulimit的方法只是session wide的解决方法。

永久的解决方法也有很多,
sysctl -w fs.file-max 65536
或者
echo "65536" /proc/sys/fs/file-max (直接作用在pseudo file system上对应的文件)

以下是我自己研究和其他guru讨论之后的结论,写在自己的blog上了,如果有什么问题,请指出,我会更正。

http://terrywang.net/archives/549
基本上优先级:
soft limit < hard limit < kernel < 实现最大file descriptor数采用的数据结构所导致的限制

The Linux kernel provides the getrlimit and setrlimit system calls to get and set resource limits per process. Each resource has an associated soft and hard limit. The soft limit is the value that the kernel enforces for the corresponding resource. The hard limit acts as a ceiling for the soft limit: an unprivileged process may only set its soft limit to a value in the range from 0 up to the hard limit, and (irreversibly) lower its hard limit. A privileged process (one with the CAP_SYS_RESOURCE capability) may make arbitrary changes to either limit value.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表