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”参数调大即可:
Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。
H指定了硬性大小,
S指定了软性大小,
n表示设定单个进程最大的打开文件句柄数量。
如果想让用户登录即修改“open file”参数,有两种方法:
1、修改系统配置文件/etc/security/limits.conf,在最后添加
work soft nofile 4096
work soft nofile 4096
|
2、将命令添加到/etc/profile组后,这样所有用户登录都会改变
阅读(1939) | 评论(0) | 转发(0) |