进程没有使用我设置的新打开文件配置?

进程没有使用我设置的新打开文件配置?

我有一个以用户身份运行的进程golden,我正在尝试增加该用户的打开文件限制,以便该用户启动的所有进程都应该使用该设置。我将限制更改为以下文件,并且更改没有生效:

/etc/security/limits.conf:

*       soft    nofile  65535
*       hard    nofile  100000

我通过更改通配符的限制来修改所有用户的设置,*如上所示。现在,我以黄金用户身份启动了我的进程,并在 cat 命令下执行,我看到它正在用作8092打开的文件,所以我不确定为什么我的更改没有生效。

golden@machineA:~$ cat /proc/1442/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             483036               483036               processes
Max open files            8092                 8092                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       483036               483036               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

我使用的是 Ubuntu 14.04 盒子。知道这里出了什么问题吗?如何确保golden用户启动的所有进程都使用新的打开文件配置?我认为在某些地方 8092 是硬编码的,因为它不会覆盖这个值。

cat /proc/sys/fs/file-max
6145946

答案1

/etc/limits是登录时设置。此处的更改在用户登录时应用,而不是在进程启动时应用。没有进程启动的配置。进程继承其父进程的限制。

请注意,进程始终可以选择降低其限制。如果您启动登录会话,并通过ulimit -a在 shell 中运行来确认更高的限制,然后运行该进程在那个壳里,并且该过程的限制最终降低,这意味着该过程正在降低其限制。如果是这样,您将不得不探索该程序的配置,看看是否可以阻止它这样做。

相关内容