ulimit PICKLE:“不允许操作”和“找不到命令”


15

我正在尝试增加当前用户的最大打开文件数

> ulimit -n
1024

我尝试增加并失败如下

> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted

所以我自然而然地尝试在临时权限下运行,但是失败了

> sudo ulimit -n 4096
sudo: ulimit: command not found

问题

  1. 如何增加ulimit?
  2. 为什么会这样呢?

使用Fedora 14


回应已删除的评论:ulimit 4096不起作用。我认为-n是正确的。作为概念验证,如果我先这样做sudo su - root(但只有root才可以更改)。
paislee 2012年


Answers:


17

ulimit是内置的Shell,而不是外部命令。它需要内置,因为它对shell进程本身起作用,例如cd:限制(如当前目录)是该特定进程的属性。

sudo bash -c 'ulimit -n 4096'可以,但是会更改sudo仅由bash调用的bash进程的限制,这对您没有帮助。

每个限制有两个值:硬限制和软限制。只有root可以提高硬性限制;任何人都可以降低硬限制,并且可以在任何方向上修改软限制,唯一的限制是不能高于硬限制。软极限是重要的实际值。

因此,您需要安排所有进程对打开文件的硬限制至少为4096。您可以将软限制保持为1024。启动需要大量文件的进程之前,请提高软限制。在中/etc/security/limits.conf,添加行

paislee hard nofile 4096
paislee soft nofile 1024

paislee您要以其身份运行进程的用户名在哪里。在启动您想要更高限制的进程的shell中,运行

ulimit -Sn unlimited

将软限制提高到硬限制。


1
另一种选择sudo bash -csudo -i启动登录外壳程序和sudo -s启动外壳程序。适用相同的限制,但是在其他情况下可能会有用。
Bram

谢谢。我可以问一些相关的问题吗?其他回复和发布stackoverflow.com/a/17483998/156458unix.stackexchange.com/a/238413/674unix.stackexchange.com/a/169035/674均建议使用 sudo sh -c "ulimit -c 1024 && exec su $LOGNAME"。但两者ulimit -c 1024exec su $LOGNAME" 只影响创建的外壳sudo,那么什么是命令的目的是什么?exec su $LOGNAME"使用更改后的限制也无济于事。我很困惑,想知道我是否想念一些东西。
蒂姆(Tim)

请注意,这ulimit -Sn unlimited不适用于大多数外壳。正确的方法是先调用ulimit -a,然后再调用ulimit -n <number><number是硬限制(右列)。
schily

3

打开文件/etc/security/limits.conf并添加行<user> soft nofile <value>。将ulimit更改用于root用户并尝试相同。

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.