在 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 种方式进行交叉检查。
检查 Linux 系统范围设置中打开的文件过多
要查看操作系统级别的最大打开文件数设置,请使用以下命令:
# cat /proc/sys/fs/file-max
检查 Linux 中每个用户打开的文件过多设置
我们可以看到用户的最大打开文件数设置,以 root 身份发出以下命令:
# su – <user> $ ulimit -n
默认设置通常为 1024。
检查 Linux 上的 systemd 服务中打开的文件过多
如果我们将实例作为 systemd 服务启动,我们可以在
[Service]
其服务文件的部分中指定限制。服务文件的位置类似于/etc/systemd/system/<process-name>.service
.