Linux执行指令报错:
too many open file
怎么处理
解决:终极解决方案
echo“”>>/etc/security/limits.conf echo“*softnproc65535″>>/etc/security/limits.conf echo“*hardnproc65535″>>/etc/security/limits.conf echo“*softnofile65535″>>/etc/security/limits.conf echo“*hardnofile65535″>>/etc/security/limits.conf echo“”>>/root/.bash_profile echo“ulimit-n65535″>>/root/.bash_profile echo“ulimit-u65535″>>/root/.bash_profile
最后重启机器或者执行:
ulimit-u655345&&ulimit-n65535
打开文件过多,执行的进程太多了,可以修改配置增加最大文件描述符限制。
编辑文件 /etc/security/limits.conf,找到或添加如下内容,65535貌似是可设置的最大值:
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
打开的文件太多,注意Linux系统下文件的概念与win不同(比如打开的监听端口)
可以修改限制:
ulimit -n 65535
如果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();
}
}
}
如果在Linux环境下执行指令遇到了"too many open file"报错,需要进行如下处理:
首先需要了解每个用户最大允许打开的文件数量,可以通过运行ulimit -a
来查看当前设置,其中 open files (-n) 表示每个用户最大允许打开的文件数量。
如果超过了最大允许打开文件数量的限制,需要修改系统的open files数值限制,可以通过运行ulimit -n 新的限制数值
来修改。注意,这种修改方法在重启后会还原为默认值,需要进行永久设置。永久设置方法是修改限制文件/etc/security/limits.conf
,在文件末尾加入如下内容即可:
* soft nofile 新的限制数值
* hard nofile 新的限制数值
cat /proc/{pid}/limits |grep 'Max open files'
命令来查看。如果需要修改Max open files的数量限制,也可以通过调整/etc/security/limits.conf
文件来实现。需要注意的是,在修改完毕配置文件之后需要重启系统才能生效。