Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2104302
  • 博文数量: 220
  • 博客积分: 8531
  • 博客等级: 中将
  • 技术积分: 4976
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-18 13:33
文章分类

全部博文(220)

文章存档

2017年(1)

2015年(1)

2014年(5)

2013年(6)

2012年(6)

2011年(30)

2010年(37)

2009年(53)

2008年(41)

2007年(40)

分类: LINUX

2007-08-17 09:50:28

    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组后,这样所有用户登录都会改变

阅读(1919) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~