如何更改进程的最大文件限制

如何更改进程的最大文件限制

是的,我知道这个问题之前有人问过,我尝试了所有我见过的解决方案,但没有一个对我有用。我们正在运行 Ubuntu 12,并且我们有一个进程,每次机器启动时都会由 upstart 自动启动。我进入了 /etc/security/limits.conf 并添加了以下几行:

*                hard    nofile          65000
*                soft    nofile          32000
root             hard    nofile          65000
root             soft    nofile          32000

我还进入 /etc/pam.d/common-session 并添加了以下行:

session required        pam_limits.so

为了使其适用于非交互式进程,我还进入了 /etc/pam.d/common-session-noninteractive 并添加了完全相同的行。

当我以管理员用户身份登录(在 sudo 列表中,我将此用户称为 SUDOUSER)时,当我执行 ulimit -a 时,我看到限制现在是 32000,正如预期的那样。

然后我重新启动整个机器,以确保限制适用于新进程,例如重启后由 upstart 启动的进程。

但是,重启后,当我查看运行时启动的持久进程时,我得到了进程 ID(例如 12345),然后执行 cat /proc/12345/limits 并且我看到限制仍然是默认值(软限制 1024,硬限制 4096)。

那么我做错了什么?

答案1

好的,我找到了解决方案。事实证明,upstart 忽略了 pam.d 和 limits.conf 中的所有限制。在 upstart 中执行此操作的方法是在 upstart conf 脚本中为该进程明确设置限制。因此,假设该进程是 myproc,并且您有一个文件 /etc/init/myconf.conf。在此脚本中,只需在顶部附近的某处包含此行:

limit nofile 32000 65000

确保此行独立存在 - 它没有放在脚本或者预启动脚本等里面 - 它本身就是一条主线(或者“节”)。

现在只需重新启动该进程并使用 cat /proc/12345/limits 查看限制

相关内容