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

如何增加 Ubuntu 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

并添加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)。

我错过了什么?

答案1

来自手册:

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

systemd有一个选项:

$ more /etc/systemd/system.conf | grep NOFILE
#DefaultLimitNOFILE=

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

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

DefaultLimitNOFILE=65536 

可能还需要

/etc/systemd/user.conf 

答案2

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
堆栈大小(kbytes,-s)8192
CPU 时间(秒,-t)无限制
最大用户进程数 (-u) 7873
虚拟内存(kbytes,-v)无限制
文件锁 (-x) 无限制
  1. 记下需要更改的内容

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

$ man limits.conf

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

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

       /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 软 memlock 无限
mongodb 硬 memlock 无限
mongodb 软 nofile 64000
mongodb 硬盘 nofile 64000
mongodb 软 nproc 64000
mongodb 硬盘 nproc 64000
  1. 最后,最后,记住 man limits.conf 条目中的这一点。

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

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

sudo 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
堆栈大小(kbytes,-s)8192
CPU 时间(秒,-t)无限制
最大用户进程数 (-u) 64000
虚拟内存(kbytes,-v)无限制
文件锁 (-x) 无限制

正如你所见,lubbly jubbly 已经全部设置到了我们想要的限制。

答案3

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

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

$ ulimit -Sn
100000

相关内容