问题说明:
- 在linux系统中,如果开的线程数过多,或者打开的文件太多,会报这样的错误:java.io.IOException: Too many open files。意思是系统能够打开的句柄数已经达到了限制,无法打开新的文件句柄了。
突破局部文件句柄数(单个进程能够创建的文件句柄数):
- 查看当前局部文件句柄数:ulimit -n
- 临时修改当前局部文件句柄数:ulimit –n 10000,这是临时设置,系统重启后设置会丢失
- 永久修改当前局部文件句柄数:修改文件/etc/security/limits.conf,文件末尾加上:
- * hard nofile 1000000
- * soft nofile 1000000
- 修改文件后需要重启机器,才能生效
临时突破全局文件句柄数(所有进程所能够创建的文件句柄数)
- 查看全局文件句柄数:cat /proc/sys/fs/file-max
- 配置:echo 1000000 > /proc/sys/fs/file-max
- 配置后立即生效
永久突破全局文件句柄数
- 配置文件/etc/sysctl.conf,在文件末尾加上:fs.file-max=1000000
- 使配置文件生效:sysctl -p
特别注意:
- 局部文件句柄数一定不要超过全局文件句柄数!!!我就遇到过,因为一时疏忽,把局部文件句柄数设置超过了全局文件句柄数,导致无法开机后无法登陆的现象!!!