打开文件过多,限制较高

打开文件过多,限制较高

使用 Ubuntu 18.04.4 LTS (Linux 5.3.0-62-generic) 时,我经常遇到“打开文件过多”错误。例如,我必须关闭 Web 浏览器才能使用/构建/编译 Android Studio。

硬件配置:

  • 处理器 Intel Core i7-5820K(6 核/12 个虚拟核)
  • 32 转 RAM
  • 双启动 Ubuntu / Windows 7
  • 系统位于 SSD / Ext4 部分,数据位于 HDD / NTFS 部分(共享 win/lin)

配置和系统状态:

$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127862
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4096
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 500000
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
$ lsof | wc -l

194775
$ cat /etc/security/limits.conf

# [... commented lines ]

*               soft     nofile         500000
*               hard     nofile         500000
*               soft     nproc          500000
*               hard     nproc          500000

root            soft     nofile         500000
root            hard     nofile         500000
root            soft     nproc          500000
root            hard     nproc          500000


# End of file

对于 PID 3353 (Java / Android Studio)

$ lsof -p 3353 | wc -l

875
$ cat /proc/sys/fs/file-nr

14144   0   2097152

我不明白为什么会出现这个错误?!;-(

请帮忙

ulimit -n和 /etc/security/limits.conf之间的限制是什么?

在 /etc/security/limits.conf 中,所有用户的限制为 500000。

使用ulimit -n,限制为 4096

如果 X > 4096 则返回ulimit -n X错误:

ulimit: open files: cannot modify limit: operation not permitted

答案1

您看到此错误是因为明显超出了打开文件的限制。

如果你看看该命令的输出

lsof | grep -F ' REG '|wc -l

您将看到有多少常规文件处于打开状态。这个数字肯定大于您的限制 4096。

了解哪个用户遇到此错误也很重要,因为 Linux 不仅针对整个系统设置了限制,还针对单个用户设置了限制。

为了解决这个问题,一旦你找到了罪魁祸首,你就应该增加特定用户和/或整个系统的限制。

在 /etc/security/limits.conf 中,您应该写入软限制和硬限制
username soft nofile 799972
username hard nofile 1048576
其中 username 是您的用户名

之后您应该重新登录操作系统,或者更好的是,重新启动计算机。

相关内容