工作过程中的“最大打开文件”

时间:2010-09-17 11:36:29

标签: linux file process limit

是否可以为工作流程增加“Max open files”参数? 我的意思是这个参数:

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

感谢您的建议

8 个答案:

答案 0 :(得分:22)

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

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

答案 1 :(得分:15)

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

  

prlimit -n4096 -p pid_of_process

答案 2 :(得分:6)

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

你的应用程序不会关闭,但在你执行通话时暂时冻结。如果你很快(或你编写脚本!),它可能不会引人注意。

答案 3 :(得分:5)

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

  

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

     

$ sysctl -w fs.file-max = 100000

     

您需要编辑/etc/sysctl.conf文件并放入以下行,以便重启后设置将保持不变

答案 4 :(得分:5)

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

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

答案 5 :(得分:4)

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

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

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

答案 6 :(得分:4)

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

ulimit -Sa
ulimit -Ha

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

答案 7 :(得分:0)

在运行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