- 这篇博客: Linux下文件句柄中的 Too many open files 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
-
如果Java打开文件的时候,没有关闭IO流,那么打开到一定数量,在Linux下就会抛出Too many open files的异常。
-
public static class HoldIOTask implements Runnable {
-
@Override
-
public void run() {
-
int count=0;
-
try {
-
while(true) {
-
FileOutputStream fos = new FileOutputStream(new File("temp"));
-
fos.write(1);
-
fos.close();
-
FileInputStream fis = new FileInputStream(new File("temp"));
-
while(fis.read()!=-1);
-
// fis.close();
-
count++;
-
Thread.sleep(5);
-
}
-
} catch (Throwable e) {
-
System.out.println(count);
-
e.printStackTrace();
-
}
-
}
-
}
-
- 以下回答由chatgpt基于相关博客总结生成:
如果在Linux环境下执行指令遇到了"too many open file"报错,需要进行如下处理:
-
首先需要了解每个用户最大允许打开的文件数量,可以通过运行
ulimit -a
来查看当前设置,其中 open files (-n) 表示每个用户最大允许打开的文件数量。 -
如果超过了最大允许打开文件数量的限制,需要修改系统的open files数值限制,可以通过运行
ulimit -n 新的限制数值
来修改。注意,这种修改方法在重启后会还原为默认值,需要进行永久设置。永久设置方法是修改限制文件/etc/security/limits.conf
,在文件末尾加入如下内容即可:
-
* soft nofile 新的限制数值
-
* hard nofile 新的限制数值
- 如果需要检查发生"too many open file"报错的进程的Max open files,可以运行
cat /proc/{pid}/limits |grep 'Max open files'
命令来查看。如果需要修改Max open files的数量限制,也可以通过调整/etc/security/limits.conf
文件来实现。
需要注意的是,在修改完毕配置文件之后需要重启系统才能生效。
-
03-29
3391
05-01
3092
03-20
3682