是否可以为工作流程增加“Max open files”参数? 我的意思是这个参数:
cat /proc/<pid>/limits | grep files
感谢您的建议
答案 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