关于ulimit -a 显示的文件打开句柄数的含义

来源:互联网 发布:淘宝刷客 编辑:程序博客网 时间:2024/05/04 10:42
关于ulimit -a 显示的文件打开句柄数的含义来源: ChinaUnix博客  日期: 2007.08.17 09:50 (共有条评论) 我要评论     ulimit 我经常用了,还经常设置一些参数,尤其是open file,当时的理解是:openfile设置为多大,此用户就只能最大打开这么多文件。我还经常给客户讲课,尤其是邮政的客户,讲课我都是这么讲的。我纳闷这到底是谁最先告诉我是这么解释的?
                
                
                [fante@fante ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3959
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
max rt priority                 (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3959
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
file locks                      (-x) unlimited
    昨天才知道确切的意义:在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。
    以前也遇到过,某些用户比如weblogic用户,登录后提示“too many files open”,原来是某个进程打开的文件数过多。这个进程是由哪个用户打开的,需要修改这个用户的“open file”参数。
    下面命令可以看到系统中进程打开文件数的一个排序:
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
[root@lvs191 ~]# lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
     64 18563
     63 18632
     63 18583
     62 18617
     61 18561
     60 18565
[root@lvs191 ~]# ps -ef|grep 18563
oracle   18563     1  0 Aug15 ?        00:00:07 ora_lgwr_orcl
    其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。可以查看到这个18563的进程是oracle的一个进程。
    一般情况下http一类的进程可能会打开文件数比较大,这样就需要将“open file”参数调大即可:
ulimit -HSn 4096 
    Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。
    如果想让用户登录即修改“open file”参数,有两种方法:
    1、修改系统配置文件/etc/security/limits.conf,在最后添加
work                soft        nofile      4096
work      soft      nofile      4096
    2、将命令添加到/etc/profile组后,这样所有用户登录都会改变