无法像我想要的那样设置 ulimit -n

无法像我想要的那样设置 ulimit -n

我只想设置 ulimit -n (每个进程最大打开文件数)并让设置在重新启动后继续存在,但事实证明这很困难。

我不知道还能在哪里进行更改以允许对其进行设置。

root@z:~# cat /etc/sysctl.conf | grep file-max
fs.file-max = 2000000
root@z:~# cat /etc/security/limits.conf | grep nofile
#        - nofile - max number of open files
* soft     nofile         2000000   
* hard     nofile         2000000
root@z:~# sudo sysctl -p | grep file
fs.file-max = 2000000
root@z:~# ulimit -n 2000000
-su: ulimit: open files: cannot modify limit: Operation not permitted
root@z:~# whoami
root

另一方面,这个较低的设置是有效的:

ulimit -n 1048576

请让我知道如何将每个进程限制设置为 2000000 以及如何在重新启动后保持该设置,我使用的是 Ubuntu 18.04

答案1

# ulimit -n 1048576
# ulimit -n 2000000
bash: ulimit: open files: cannot modify limit: Operation not permitted
# sysctl fs.nr_open
fs.nr_open = 1048576
# sysctl fs.nr_open=2000000
fs.nr_open = 2000000
# ulimit -n 2000000
# ulimit -n
2000000

proc(5) 手册页:

/proc/sys/fs/nr_open
RLIMIT_NOFILE该文件对资源限制可以提高到 的值施加上限 (请参阅 getrlimit(2))。对于非特权进程和特权进程都强制执行此上限。该文件中的默认值为 1048576。

另一方面,file-max是所有进程的极限:

/proc/sys/fs/file-max
此文件定义了系统范围内所有进程打开文件数量的限制。遇到此限制时失败的系统调用将失败并出现错误 ENFILE。

我并不是完全不知道足够多的打开文件是否会导致其他问题。

答案2

在我与这个问题斗争了一个多小时后,我解决了这个问题!

  1. 删除内容/etc/security/limits.d/
  2. 删除/etc/security/limits.conf并重新创建该文件,如下所示:
    vi /etc/security/limits.conf
    root    -   nproc   500000
    root    -   nofile  500000
    myuser  -   nproc   130000
    myuser  -   nofile  130000
    

注销并登录后,限制生效:

ulimit -n
500000

相关内容