修改特定进程的ulimit(打开文件)

tes*_*est 35 limit ulimit

是否有可能改变软-和硬限制一个的具体过程?

就我而言,我的流程是mongod,很多网络资源告诉我只需执行:

ulimit -n <my new value>
Run Code Online (Sandbox Code Playgroud)

我目前的想法:

  • 命令如何知道我将要修改的进程的限制?这不会修改整个系统的打开文件限制吗?
  • 我猜这个命令只会改变软限制。那么有没有办法增加硬限制呢?

use*_*610 40

要更改正在运行的进程的限制,您可以使用实用程序命令prlimit。

prlimit --pid 12345 --nofile=1024:1024
Run Code Online (Sandbox Code Playgroud)

在内部所做的是调用setrlimit(2). prlimit 的手册页应该包含一些有用的调用示例。

来源:https : //sig-io.nl/posts/run-time-editing-of-limits-in-linux/


Bru*_*ger 36

进程可以通过setrlimit(2)系统调用更改其限制。当您运行时,ulimit -n您应该看到一个数字。这是进程的打开文件描述符(包括文件、套接字、管道等)数量的当前限制。该ulimit命令执行getrlimit(2)系统调用以找出当前值。

这是关键点:进程从其父进程继承其当前限制。因此,如果您运行,ulimit -n 64您会将 shell 的打开文件描述符限制设置为 64。shell 启动的任何进程都将具有相同的限制,除非该新进程setrlimit()正确调用。

要更改mongodb's打开的文件描述符限制,您需要ulimit -n 2048在 shell 中运行(或内核允许的任何大数目)。然后,您将使用该 shell 启动mongodb. 作为子进程,mongodb将继承对打开文件描述符的(大)限制。

要修改系统的打开文件限制,这看起来更像是所有进程打开文件描述符限制的总和,您必须执行诸如 modify/etc/sysctl.conf和 run 之类的操作sysctl -p。查看 中的fs.file-max参数值/etc/sysctl.conf。