在 Linux 中,我遇到了太多打开文件的问题

在 Linux 中,我遇到了太多打开文件的问题

在 Linux 中,我遇到了打开文件过多的问题,然后我们将软文件限制和硬文件限制从 1024 增加到 65355,但仍然遇到相同的问题

    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.io.IOException: Too many open files
    at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.base/java.io.File.createTempFile(File.java:2129)
    at com.boomi.util.FileUtil.createTempFile(FileUtil.java:901)
    at com.boomi.util.FileUtil.createTempDirectory(FileUtil.java:880)
    at com.boomi.util.FileUtil.createTempDirectory(FileUtil.java:862)
    at com.boomi.transform.data.DataNodeCache.createStorageLocation(DataNodeCache.java:352)
    at com.boomi.store.db.BigMap.getDb(BigMap.java:592)
    ... 84 more
Nov 2, 2022 8:46:02 AM AEDT WARNING [com.boomi.util.LogUtil doLog] Failed purging bigmap cache (2)
java.sql.SQLException: Failed creating storage location
    at com.boomi.store.db.BigMap.getDb(BigMap.java:594)
    at com.boomi.transform.data.DataNodeCache.store(DataNodeCache.java:270)
    at com.boomi.transform.data.DataNodeCache.store(DataNodeCache.java:29)
    at com.boomi.store.db.BigMap$NewRef.discard(BigMap.java:735)
    at com.boomi.store.db.BigMap.trimCache(BigMap.java:393)
    at com.boomi.store.db.BigMap.reduceMemoryIfNecessary(BigMap.java:583)
    at com.boomi.store.db.BigMap.put(BigMap.java:361)
    at com.boomi.store.db.BigMap.put(BigMap.java:280)

答案1

您更改的限制适用于用户和会话。

强烈建议注销并重新启动应用程序。另一方面,您是否修改了操作系统的限制?您是否尝试过执行以下操作(除了执行注销、登录和重新启动应用程序/脚本之外)?

编辑/etc/sysctl.conf并添加:

fs.文件最大值 = 999999

保存更改并执行命令

sysctl -p

最后但并非最不重要的一点是,您必须重新启动应用程序。

答案2

当“打开文件过多”错误消息写入日志时,表明该进程的所有可用文件句柄都已被使用(这也包括套接字)。

当进程需要打开的文件数量超过操作系统允许的数量时,就会发生“打开文件过多”错误。该数量由进程拥有的文件描述符的最大数量控制。

您可以通过 3 种方式进行交叉检查。

  1. 检查 Linux 系统范围设置中打开的文件过多

    要查看操作系统级别的最大打开文件数设置,请使用以下命令:

    # cat /proc/sys/fs/file-max
    
  2. 检查 Linux 中每个用户打开的文件过多设置

    我们可以看到用户的最大打开文件数设置,以 root 身份发出以下命令:

    # su – <user>
    $ ulimit -n
    

    默认设置通常为 1024。

  3. 检查 Linux 上的 systemd 服务中打开的文件过多

    如果我们将实例作为 systemd 服务启动,我们可以在[Service]其服务文件的部分中指定限制。服务文件的位置类似于/etc/systemd/system/<process-name>.service.

相关内容