在Mac OS X 10.6上ulimit的异常行为


8

使用ulimit时,我得到一些非常奇怪的行为。我刚打开一个新壳

Hector:~ robertj$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 256 
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 532
virtual memory          (kbytes, -v) unlimited

好的,即使您将/etc/launchd.conf中的文件限制设置为unlimit,这似乎也是默认设置。但这是另一天的另一个问题。

现在,我将文件数增加到1024,然后再次查看新设置。

 Hector:~ robertj$ ulimit -n 1024
 Hector:~ robertj$ ulimit -a | grep open
 open files                      (-n) 1024

好吧,那行得通。凉!现在让我们再次更改设置

Hector:~ robertj$ ulimit -n 512
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512

再次很好地工作。让我们再次更改为更高的值

Hector:~ robertj$ ulimit -n 1024
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Hector:~ robertj$ 

这现在是什么?

如果我尝试使用sudo,我不会收到错误,但是该值也不会更改。

Hector:~ robertj$ sudo ulimit -n 1024
Password:
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Hector:~ robertj$ 

这里发生了什么?

我完全陷入了困境!

任何帮助是极大的赞赏...

罗伯特

Answers:


18

有两件事使您感到困惑。首先是每种资源都有硬性限制和软性限制。 ulimit -n 512设置它们两者,但ulimit -a仅显示软限制。一旦设置了硬限制,就只能降低该限制。

$ ulimit -n
256
$ ulimit -Hn  # There's no initial hard limit
unlimited
$ ulimit -n 512  # This sets both the hard and soft limits
$ ulimit -n
512
$ ulimit -Hn
512
$ ulimit -n 1024  # Once set, the hard limit cannot be increased
-bash: ulimit: open files: cannot modify limit: Operation not permitted

让您感到困惑的第二件事是,您sudo ulimit没有按照自己的想法去做。它产生一个(根)子过程,设置打开文件限制该子过程,然后退出子处理。限制是每个进程的设置,因此对它们进行更改并没有任何用处。


嗨,戈登,谢谢你的解释。遗憾的是,我还不能支持您的回答-但这很有帮助!

因此,如果设置了硬限制,我们如何增加硬限制?
greg

@greg:我认为您不能-这就是使其成为硬限制的原因。在一些操作系统中,root可以提高对其他进程的硬性限制,但我甚至不认为这是可能在OS X
戈登戴维森

谢谢。我不小心将它设置得太低,这几乎使我的系统无法使用。重新启动似乎可以解决该问题。
greg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.