【发布时间】:2010-09-17 11:36:28
【问题描述】:
是否可以为工作进程增加“最大打开文件”参数? 我的意思是这个参数:
cat /proc/<pid>/limits | grep files
感谢您的建议
【问题讨论】:
-
附加信息:我的进程是“java”。我需要在不停止进程的情况下增加“最大打开文件数”。
是否可以为工作进程增加“最大打开文件”参数? 我的意思是这个参数:
cat /proc/<pid>/limits | grep files
感谢您的建议
【问题讨论】:
另一个选择是使用 prlimit 命令(来自 util-linux 包)。例如,如果要将正在运行的进程的最大打开文件数设置为 4096:
prlimit -n4096 -p pid_of_process
【讨论】:
作为系统管理员:/etc/security/limits.conf 文件在大多数 Linux 安装中控制这一点;它允许您设置每个用户的限制。你会想要像myuser - nofile 1000 这样的行。
在一个进程内:The getrlimit and setrlimit calls 控制大多数每个进程的资源分配限制。 RLIMIT_NOFILE 控制文件描述符的最大数量。您需要适当的权限才能调用它。
【讨论】:
limits.conf不被考虑在内,你必须在/etc/systemd/system.conf和user.conf中设置DefaultLimitNOFILE。
echo -n "Max open files=20:20" > /proc/$pid/limits
...适用于 RHEL5.5 和 RHEL6.7。
注意“-n”是强制性的;尾随换行符将生成有关无效参数的投诉。
【讨论】:
This link 详细说明如何更改此系统范围或每个用户。
Oracle 数据库或 Apache Web 服务器等许多应用程序需要 这个范围相当高。所以你可以增加最大数量 通过在内核变量中设置新值来打开文件 /proc/sys/fs/file-max如下(以root登录):
$ sysctl -w fs.file-max=100000
您需要编辑 /etc/sysctl.conf 文件并输入以下行,以便重新启动后设置将保持原样
【讨论】:
是的,可以增加/proc/<pid>/limits中的限制
在运行时。只需找到 pid 并执行以下命令:
echo -n "Max open files=20:20" > /proc/$pid/limits
【讨论】:
以下命令给出了默认限制(分别为软和硬)允许的每个进程的最大打开文件数:
ulimit -Sa
ulimit -Ha
您可以使用程序或命令来更改这些限制。看看ulimit(man ulimit)。
【讨论】:
在运行 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
【讨论】: