无法将打开文件的限制增加到4096(Ubuntu)以上


34

我在Ubuntu 17.04上。试图提高打开文件的限制,但我在网上找到的所有说明均无效。我可以提高到4096,但不能超过该范围。

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

这样可行。这不是:

$ ulimit -n 4097
bash: ulimit: open files: cannot modify limit: Operation not permitted

似乎是由于硬限制:

$ ulimit -Hn
4096

我尝试将这些行添加到/etc/security/limits.conf中:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

还将这一行添加到/etc/pam.d/common-session和/etc/pam.d/common-session-noninteractive:

session required pam_limits.so

从那以后,我重新启动了计算机。对limits.conf的更改似乎没有任何影响。硬限制仍然停留在4096,阻止我继续前进。如何增加我的打开文件限制?


这是一些其他配置信息:

$ cat /proc/sys/fs/file-max 
1624668

Answers:


56

好,我终于明白了。我在/etc/security/limits.conf中设置的限制已应用,但未应用于图形登录。可以从终端窗口中这样验证:

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

经过更多的研究,我找到了此错误报告,使我指出了正确的方向。为了修改登录外壳程序使用的限制,我们需要在/etc/systemd/user.conf中添加以下行:

DefaultLimitNOFILE=65535

该更改有效,但仅影响软限制。(使我们仍然具有4096的硬限制。)为了也影响硬限制,我们必须使用相同的更改来修改/etc/systemd/system.conf。

我在/etc/pam.d中所做的更改不是必需的。至少在Ubuntu上,这已经可以了。此外,没有必要更改设置root*limits.conf中。更改限制mkasberg就足够了,至少对于我的用例而言。


综上所述

如果您想增加所示的限制ulimit -n,则应该:

  • 用以下行修改/etc/systemd/user.conf和/etc/systemd/system.conf(这需要图形登录):

    DefaultLimitNOFILE=65535
    
  • 用以下几行修改/etc/security/limits.conf(这需要非GUI登录):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • 重新启动计算机以使更改生效。


2
DefaultLimitNOFILE=65535做到了。但是为什么/etc/security/limits.conf 不起作用?
Suvitruf说恢复莫妮卡

6
GUI登录使用systemd,它显然具有其自己的配置(/etc/systemd/system.conf),而与终端会话(/etc/security/limits.conf)的常规配置无关。我对systemd的了解还不够,所以不知道为什么采用这种方式。
mkasberg

1
@Suvitruf,因为它在systemd系统中被忽略。我正在发布答案。
Marc.2377

1
只是要指出,root不能由*或组说明符来指定用户的限制。root必须明确指定文字。
Petr Javorik '18

2
重新启动后,这对我有用
张世和

14

无需更改/etc/security/limits.conf文件中的任何内容,如果您使用的是systemd,它将被忽略。

(在网络上重现对另一个问题的修改答案 ...)

对于不希望编辑默认文件/etc/systemd/system.conf/etc/systemd/user/conf文件的用户的替代方法:

  1. /etc/systemd/system.conf.d/limits.conf使用以下内容创建一个新文件:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. systemctl daemon-reexec以root身份运行

  3. 注销并再次登录

  4. 使用检查新的限额ulimit -n

有关详细信息,请参见手册systemd-system.conf


在我的Ubuntu 18.10系统上,相关文件位于/etc/systemd/system.conf。谢谢,您可以在那里进行更改。
Stephen Kennedy

1
只是为我注销不起作用(Ubuntu 18.04),但是重新启动却完成了该工作。非常优雅的解决方案,谢谢。
stann1

0

使用Ubuntu 17.04,我得到了描述的硬限制:

user@paresh.com:~$ ulimit -Hn
4096

我可以使用降低它ulimit,但不能增加它,正如问题所描述的那样。ulimit手册描述:

只有root可以增加硬限制。

所以我试图/etc/security/limits.conf像这样设置一个更高的限制:

user hard nofile 9999

像这样的全新登录名ssh localhost -l user给了我新的限制:

user@paresh.com:~$ ulimit -Hn
9999

我希望这也对您有用。


0
  1. 编辑/etc/systemd/system/sonar.service

  2. 在服务下添加这两行

[服务]

LimitMEMLOCK =无穷大

限制NOFILE = 65535

  1. systemctl守护程序重新加载
  2. systemctl重新启动声纳

这对我有用。


0

TL; DR我觉得需要集中答案,因此更容易找到它们。花了我很长时间才能将所有部分放在一起以使其正常工作...

有两个要考虑的位置。

  1. GUI会话

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    或者在这里更好:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. 外壳环境

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    或者在这里更好:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. 更改上述文件中的设置后,重新启动,然后使用以下方法检查限制: ulimit -n -Hn -Sn

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.