【问题标题】:"Max open files" for working process工作进程的“最大打开文件数”
【发布时间】:2010-09-17 11:36:28
【问题描述】:

是否可以为工作进程增加“最大打开文件”参数? 我的意思是这个参数:

cat /proc/<pid>/limits | grep files

感谢您的建议

【问题讨论】:

  • 附加信息:我的进程是“java”。我需要在不停止进程的情况下增加“最大打开文件数”。

标签: linux file process limit


【解决方案1】:

另一个选择是使用 prlimit 命令(来自 util-linux 包)。例如,如果要将正在运行的进程的最大打开文件数设置为 4096:

prlimit -n4096 -p pid_of_process

【讨论】:

  • 我使用的是 linux mint(基于 Ubuntu),但在默认安装中找不到它。通常它是 util-linux 包的一部分,但在 Mint 上的这个包没有带这个命令。
  • ➜ ~ lsb_release -d 说明:Ubuntu 16.04.1 LTS ➜ ~ whereis prlimit prlimit: /usr/bin/prlimit /usr/share/man/man2/prlimit.2.gz /usr/share /man/man1/prlimit.1.g
  • 在 CentOS 6 上找不到 prlimit。
  • 尝试安装 util-linux RPM 或等效包。
【解决方案2】:

作为系统管理员/etc/security/limits.conf 文件在大多数 Linux 安装中控制这一点;它允许您设置每个用户的限制。你会想要像myuser - nofile 1000 这样的行。

在一个进程内The getrlimit and setrlimit calls 控制大多数每个进程的资源分配限制。 RLIMIT_NOFILE 控制文件描述符的最大数量。您需要适当的权限才能调用它。

【讨论】:

  • 看来这就是我需要的。我可以为某些外部进程设置“setrlimit(RLIMIT_NOFILE,...)”吗?
  • 我不知道。如果有的话,我怀疑你会发现它深埋在一些特定于 Linux 的编程指南中,因为我无法理解标准 POSIX 还会把它放在哪里。
  • 有时limits.conf不被考虑在内,你必须在/etc/systemd/system.confuser.conf中设置DefaultLimitNOFILE
【解决方案3】:

您可以使用 gdb,进入进程,调用上述系统调用来提高您感兴趣的限制,然后继续工作并退出 gdb。我已经用这种方式动态编辑了几次。

您的应用不会关闭,而是在您执行呼叫时暂时冻结。如果你很快(或者你编写脚本!),它可能不会被注意到。

【讨论】:

  • +1 很棒的建议,this postthis blog 描述如何做到这一点。
  • 是的,这有点像调整矩阵以使事情正常...停止世界,编辑变量,继续世界...哦!德贾武!我是那个! (好吧,当我有 gdb 时!)
  • 在现代 Linux 发行版上,您可以使用 prlimit
【解决方案4】:
echo -n "Max open files=20:20" > /proc/$pid/limits

...适用于 RHEL5.5 和 RHEL6.7。

注意“-n”是强制性的;尾随换行符将生成有关无效参数的投诉。

【讨论】:

    【解决方案5】:

    This link 详细说明如何更改此系统范围每个用户

    Oracle 数据库或 Apache Web 服务器等许多应用程序需要 这个范围相当高。所以你可以增加最大数量 通过在内核变量中设置新值来打开文件 /proc/sys/fs/file-max如下(以root登录):

    $ sysctl -w fs.file-max=100000

    您需要编辑 /etc/sysctl.conf 文件并输入以下行,以便重新启动后设置将保持原样

    【讨论】:

    • 感谢您的链接。但我在询问之前找到了它:-) 但问题是在不停止进程的情况下(在运行时)和进程范围内更改参数。
    • @wako:无法从进程外部完成(除非您正在运行最新的开发内核之一,这不太可能)
    • @caf:谢谢。这正是我想听到的。
    • 查看@rkachach 对上述答案的评论。使用命令 prlimit。
    【解决方案6】:

    是的,可以增加/proc/&lt;pid&gt;/limits中的限制 在运行时。只需找到 pid 并执行以下命令:

    echo -n "Max open files=20:20" > /proc/$pid/limits
    

    【讨论】:

    • 在 Ubuntu 14.04.2 LTS 上无法正常工作。
    • Ubuntu 18.04 LTS 上的“无效参数”。
    【解决方案7】:

    以下命令给出了默认限制(分别为软和硬)允许的每个进程的最大打开文件数:

    ulimit -Sa
    ulimit -Ha
    

    您可以使用程序或命令来更改这些限制。看看ulimit(man ulimit)。

    【讨论】:

      【解决方案8】:

      在运行 rethinkdb 进程的 Ubuntu 16.04 上,这些解决方案都不起作用。

      我不断收到error: accept() failed: Too many open files.

      最终在我的/etc/security/limits.conf 文件中起作用。除了 nofile 之外,请注意 nproc。据我了解,root 需要单独指定。

      *                soft    nofile          200000
      *                hard    nofile          1048576
      root             soft    nofile          200000
      root             hard    nofile          1048576
      *                soft    nproc           200000
      *                hard    nproc           1048576
      root             soft    nproc           200000
      root             hard    nproc           1048576
      

      您可以通过运行cat /proc/sys/fs/file-max 查看系统最大文件。我只是在服务器大小的合理范围内将我的最大值设置为很高。

      您可以通过运行cat /proc/{your-pid}/limits 来验证您的进程允许的最大打开文件数。

      有用的帖子:https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a

      【讨论】:

        猜你喜欢
        • 2011-10-01
        • 1970-01-01
        • 2017-05-10
        • 2019-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-06
        • 1970-01-01
        相关资源
        最近更新 更多