`
gaozzsoft
  • 浏览: 426886 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

java.io.IOException: Too many open files解决方案

 
阅读更多

异常:java.io.IOException: Too many open files:

解决方案:

ulimit -n

Linux: vi /etc/security/limits.conf

# End of file

*       soft    nofile  65535

*       hard    nofile  65535

命令:ulimit -n

原因:   

    操作系统的中打开文件的最大句柄数受限所致,常常发生在很多个并发用户访问服务器的时候.因为为了执行每个用户的应用服务器都要加载很多文件(new一个socket就需要一个文件句柄),这就会导致打开文件的句柄的缺乏.

解决: 

  • 尽量把类打成jar包,因为一个jar包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄.
  • java的垃圾回收不能关闭网络连接打开的文件句柄,如果没有执行close()(例如:java.net.Socket.close())则文件句柄将一直存在,而不能被关闭.你也可以考虑设置socket的最大打开数来控制这个问题.
  •  对操作系统做相关的设置,增加最大文件句柄数量。
    1. Linux
      在Linux内核2.4.x中需要修改源代码,然后重新编译内核才生效。编辑Linux内核源代码中的 include/linux/fs.h文件,将 NR_FILE 由8192改为65536,将NR_RESERVED_FILES 由10 改为 128。编辑fs/inode.c 文件将MAX_INODE 由16384改为262144。或者编辑 /etc/sysctl.conf  文件增加两行 fs.file-max = 65536 和 fs.inode-max = 262144 。一般情况下,系统最大打开文件数比较合理的设置为每4M物理内存256,比如256M.可以用lsof -p <pid of process>看打开的文件句柄数.
    2. Windows
      最大文件句柄是16,384,你在任务管理器的性能这一项中可以看到当前打开的句柄数.
    服务器端修改:

    查看系统允许打开的最大文件数

    #cat /proc/sys/fs/file-max

     

    查看每个用户允许打开的最大文件数

    ulimit -a

    发现系统默认的是open files (-n) 1024,问题就出现在这里。

    在系统文件/etc/security/limits.conf中修改这个数量限制,

    在文件中加入内容:

    * soft nofile 65536 
    * hard nofile 65536

     

    另外方法:
    1.使用ps -ef |grep java   (java代表你程序,查看你程序进程) 查看你的进程ID,记录ID号,假设进程ID为12
    2.使用:lsof -p 12 | wc -l    查看当前进程id为12的 文件操作状况
        执行该命令出现文件使用情况为 1052
    3.使用命令:ulimit -a   查看每个用户允许打开的最大文件数
        发现系统默认的是open files (-n) 1024,问题就出现在这里。
    4.然后执行:ulimit -n 4096

         将open files (-n) 1024 设置成open files (-n) 4096

    这样就增大了用户允许打开的最大文件数

分享到:
评论

相关推荐

    java.io.FileNotFoundException: *****(Too many open files)

    在Java编程中,"java.io.FileNotFoundException: ***** (Too many open files)" 是一个常见的错误,意味着程序尝试打开的文件数量超过了操作系统的限制。这个错误通常出现在处理大量文件或长时间运行的程序中,尤其...

    解决删除目录提示:System.IO.IOException: 目录不是空的。

    在编程过程中,尤其是在使用C#进行文件系统操作时,可能会遇到这样一个问题:当你尝试删除一个目录,系统返回“System.IO.IOException: 目录不是空的”错误。这意味着该目录下仍有文件或子目录存在,因此无法直接...

    java.security.InvalidKeyException:illegal Key Size

    在Java编程环境中,"java.security.InvalidKeyException: illegal Key Size" 是一个常见的错误,通常发生在加密或解密操作中。这个错误表示你试图使用的密钥长度超过了Java默认的安全限制。在给定的上下文中,这个...

    java.io.CharConversionException: isHexDigit 出现错误的原因及其解决办法

    Java中的`CharConversionException`是`IOException`的一个子类,主要在字符编码转换过程中遇到问题时抛出。在你的问题中,错误提示是"java.io.CharConversionException: isHexDigit",这通常意味着在处理字符或字符...

    elasticsearch-rest-client-6.5.4-cus.jar

    针对java.io.IOException: entity content is too long [180278508] for the configured buffer limit [157286400]异常,将 DEFAULT_BUFFER_LIMIT修改为150M

    UnlimitedJCEPolicyJDK8.rar

    java安装路径Java\jre\lib\security下替换这两个架包,即可解决 java.security.cert.CertificateException: Unable to initialize, java.io.IOException: Short read of DER length

    JSP上传图片产生 java.io.IOException: Stream closed异常解决方法

    把 java 代码直接改成 jsp,上传时产生 如下异常: 2012-12-31 8:59:21 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.io.IOException: ...

    Eclipse 进行 ANT 时错误 Javadoc failed java.io.IOException Cannot run program javadoc

    在Eclipse集成开发环境(IDE)中使用ANT进行项目构建时,可能会遇到特定的错误提示:“Javadoc failed java.io.IOException Cannot run program javadoc”。这个错误信息表明在生成Java文档的过程中出现了问题,具体...

    jenkins所需的插件等

    1. **安装 Java**:Jenkins 需要 Java 运行环境,确保系统已安装最新版的 JDK。 2. **下载 Jenkins**:从官方网站获取适合 Linux 平台的 Jenkins 可执行文件。 3. **启动 Jenkins**:通过命令行启动 Jenkins,例如...

    报错:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.-附件资源

    报错:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.-附件资源

    AndroidApk混淆编译时,报告java.io.IOException…错误解决办法

    Java.io.IOException: The same input jar [E:\Android\myProgram\angel\libs\alipaySdk-20160825.jar] is specified twice. 首先 看一下我项目中关于此jar的配置,我在libs中导入了alipaySdk-20160825.jar,

    jave-1.0.2-src.jar

    it.sauronsoftware.jave.EncoderException: java.io.IOException: Cannot run program "C:\Users\moxiao\AppData\Local\Temp\jave-1\ffmpeg.exe": CreateProcess error=740, 请求的操作需要提升。 在最新的liunx ...

    hadoop1.0 Failed to set permissions of path 解决方案

    ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.io.IOException: Failed to set permissions of path: \tmp\hadoop-admin \mapred\local\ttprivate to 0700 at org.apache...

    BasicAuth2.java

    java.io.IOException: Server returned HTTP response code: 403 for URL 处理过程记录 BASIC AUTH2 POST接口,解决403问题

    Http-Multipart-Data请求

    Http-Multipart-Data-Parser-master,如需要http post接口开发、http post传文件等操作可以参考,源码的最原始地址忘记了,这个是从上面down下来新版,各位可参考

    最最常用的 100 个 Java类分享

    2. `java.io.IOException`:这是所有I/O异常的基类,用于处理输入/输出操作中的错误。 3. `java.util.List`:List接口定义了有序的集合,允许有重复元素,并提供了按索引访问的方法。 4. `java.util.HashMap`:...

    annotations.zip

    Android Build 时报错: java.io.IOException: Could not parse XML from android/accounts/annotati...Android构建时报错: app:lintVitalRelease[Fatal Error] :3:214: 与元素类型 “item” 相关联的 “name” ...

    AndroidApk混淆编译时,报告java.io.IOException...错误解决办法

    主要介绍了 AndroidApk混淆编译时,报告Error:Execution failed for task ‘:gviews:transformClassesAndResourcesWithProguardForRelease’.错误解决办法的相关资料,需要的朋友可以参考下

    rxtx-2.1.7.jar串口通信gnu.io包不存在问题

    总的来说,`rxtx-2.1.7.jar`是一个解决Java串口通信中`gnu.io`包缺失问题的关键库,配合`使用说明.txt`,开发者可以轻松地在Java项目中实现串口通信功能。记得在导入JAR文件后,正确配置项目的类路径,确保编译器能...

Global site tag (gtag.js) - Google Analytics