如何在 Ubuntu 18.04 上增加最大打开文件限制?

Ali*_*xel 28 system ulimit resource-limiting 18.04

我已经运行ulimit -n 65536,将以下行添加到/etc/security/limits.conf

*    soft nofile 65536
*    hard nofile 65536
alix soft nofile 65536
alix hard nofile 65536
root soft nofile 65536
root hard nofile 65536
Run Code Online (Sandbox Code Playgroud)

并添加session required pam_limits.so到两者中:

  • /etc/pam.d/common-session
  • /etc/pam.d/common-session-noninteractive

并且fs.file-max = 65536/etc/sysctl.d/60-file-max.conf

尽管如此,ulimit -n在我的会话重新启动并运行后,我只得到 4096(之前是 1024)。

我错过了什么?

Rin*_*ind 22

从手册:

 -n     The maximum number of open file descriptors (most
        systems do not allow this value to be set)
Run Code Online (Sandbox Code Playgroud)

systemd 有一个选项:

$ more /etc/systemd/system.conf | grep NOFILE
#DefaultLimitNOFILE=
Run Code Online (Sandbox Code Playgroud)

但这也仅适用于图形用户设置。删除#,您可以将其设置为 65536。

丹尼尔·费尔南德斯的评论

DefaultLimitNOFILE=65536 
Run Code Online (Sandbox Code Playgroud)

可能还需要

/etc/systemd/user.conf 
Run Code Online (Sandbox Code Playgroud)

  • “但这也仅适用于图形用户设置”是什么意思? (2认同)

小智 13

Ubuntu 18.04 一步一步

希望所有这些都有帮助,很长但它有效(有证据)

我在 Ubuntu 18.04 上安装 MongoDb 时遇到了这个线程

https://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/

正如你所看到的,它已经很老了,但它对我有用。

这是我所做的。

  1. MongoDb 推荐设置(https://docs.mongodb.com/manual/reference/ulimit/#review-and-set-resource-limits

    • -f(文件大小):无限制
    • -t (cpu 时间): 无限制
    • -v(虚拟内存):无限制 [1]
    • -l(锁定内存大小):无限制
    • -n(打开文件):64000
    • -m(内存大小):无限制 [1] [2]
    • -u(进程/线程):64000
  2. 检查我当前的限制

ubuntu@isdb-stage:~$ ulimit -a
核心文件大小(块,-c)0
数据段大小(千字节,-d)无限制
调度优先级 (-e) 0
文件大小(块,-f)无限制
待处理信号 (-i) 7873
最大锁定内存 (kbytes, -l) 16384
最大内存大小 (kbytes, -m) 无限制
打开文件 (-n) 1024
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
实时优先级 (-r) 0
堆栈大小(千字节,-s)8192
cpu时间(秒,-t)无限制
最大用户进程数 (-u) 7873
虚拟内存(千字节,-v)无限制
文件锁 (-x) 无限制
  1. 记下需要更改的内容

    • 锁定内存大小,需要设置为无限制。
    • 打开文件,需要设置为64000
    • 进程/线程*,需要设置为 64000
  2. ubuntu 如何更改这些限制?

$ manlimits.conf

姓名
   limit.conf - pam_limits 模块的配置文件

描述
   pam_limits.so 模块将 ulimit 限制、良好优先级和同时登录会话数限制应用于用户登录会话。此配置文件语法说明适用于

       /etc/security/limits.conf 文件和 *.conf 文件在 
       /etc/security/limits.d 目录。
  1. 看起来很清楚,编辑 /etc/security/limits.conf 文件。好的,让我们弄清楚......

这是该文件的开头,当然它甚至还有说明,记住这是好人写的开源!:)

    vi /etc/security/limits.conf

    # /etc/security/limits.conf 
    #每行描述一个用户的限制,格式如下:                                                                   
    #                                                                                
    #在哪里:                                                               
    # 可:
    # - 用户名

(如果您想了解更多详细信息,请自行查看该文件)
  1. 最后进行更改。由于 MongoDb 作为 mongodb 组和用户运行,因此最好仅提高该用户限制。我已经看到这里和那里使用了“*”,对我来说这是一个安全风险。它为服务器上的所有和杂项提供了这些限制,这些限制可用于最大化您的服务器。所以让我们只为 mongodb 用户制作它们。

这是我的更改:-

mongodb 软内存锁无限
mongodb 硬内存锁无限
mongodb 软 nofile 64000
mongodb 硬文件 64000
mongodb 软 nproc 64000
mongodb 硬 nproc 64000
  1. 最后,最后,记住 man limits.conf 条目中的这一点。

    limit.conf - pam_limits 模块的配置文件

    最好确保加载了 pam_limits 模块,以便所有这些限制工作正常工作。为此,您可以编辑 /etc/pam.d/common-session。当然,这也在手册页中。

须藤vi /etc/pam.d/common-session

# 添加此项以确保加载 pam_limits.so。
会话需要 pam_limits.so

重新启动将显示已应用限制(对于用户 mongodb)。如果您改为使用 '*' 应用它们,则无需切换到 mongodb 用户即可进行检查。只需执行此命令。

$ ulimit -a

核心文件大小(块,-c)0
数据段大小(千字节,-d)无限制
调度优先级 (-e) 0
文件大小(块,-f)无限制
待处理信号 (-i) 7873
最大锁定内存 (kbytes, -l) 无限制
最大内存大小 (kbytes, -m) 无限制
打开文件 (-n) 64000
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
实时优先级 (-r) 0
堆栈大小(千字节,-s)8192
cpu时间(秒,-t)无限制
最大用户进程 (-u) 64000
虚拟内存(千字节,-v)无限制
文件锁 (-x) 无限制

如您所见,lubbly jubbly 都设置为我们想要的限制。

  • 谢谢,在 20.04 为我工作。如果有人想检查 mongodb 用户的 ulimit:'sudo su -'(首先成为 root)然后是 'su mongodb --shell /bin/bash --command "ulimit -aH"。 (3认同)

Apt*_*ryx 12

我在 Ubuntu 20.04 上也遇到了同样的问题。

唯一需要更改的文件是/etc/security/limits.conf. 将该行附加* - nofile 100000到该文件并重新登录就可以了:

$ ulimit -Sn
100000
Run Code Online (Sandbox Code Playgroud)