java.net.SocketException Too many open files 问题的解决办法 - R&D--梦想在这里成真 R&D--夢を実現しましょう  R&D--Dreams Come Ture - IT博客
R&D--梦想在这里成真
 R&D--夢を実現しましょう
  R&D--Dreams Come Ture
   努力 我们将梦想变为现实
IT博客  ::  首页  ::  新随笔  ::  联系  ::  聚合 
  ::  管理
posts - 134,  comments - 20,  trackbacks - 0
<2009年2月>日一二三四五六25262728293031123456789101112131415161718192021222324252627281234567
常用链接
留言簿(1)
随笔分类
随笔档案
文章分类
相册
搜索
*
阅读排行榜
评论排行榜
原本以为是tomcat的配置或是应用本身的问题,"谷歌"一把后才发现,该问题的根本原因是由于系统文件资源的限制导致的。
具体可以参考http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html
的说明。具体的解决方式可以参考一下:
1。ulimit -a 查看系统目前资源限制的设定。
   [root@test security]/# umlimit -a
-bash: umlimit: command not found
[root@test security]/# ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 1024
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited
[root@test security]/#
通过以上命令,我们可以看到open files 的最大数为1024
那么我们可以通过一下命令修改该参数的最大值
- ulimit -n 4096
[root@test security]/# ulimit -n 4096
[root@test security]/# ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 4096
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited
 
这样我们就修改了系统在同一时间打开文件资源的最大数,基本解决以上问题。
以上部分是查找网络上的解决方法。设置了之后段时间内有作用。
后来仔细想来,问题还是要从根本上解决,于是把以前的代码由认真地看了一遍。终于找到了,罪魁祸首。
在读取文件时,有一些使用的BufferedReader 没有关闭。导致文件一直处于打开状态。造成资源的严重浪费。
修改之后的简单代码如下:
public void test(){
    BufferedReader reader =null;
    try{
        reader = 读取文件;
        String line = "";
        while( ( ine=reader.readLine())!=null){
           其他操作
        }
    } catch (IOException e){
        System.out.println(e);
    } finally{
         if(reader !=null){
                try {
                    reader.close();
                } catch (IOException e) {
                      e.printStackTrace();
                }
          }
    }
}
以上只是我的个人见解,希望对大家有所帮助。
posted on 2008-08-07 09:23 TRE-China R&D 阅读(6624) 评论(2)  编辑 收藏 引用 所属分类: Linux 、JAVA ![]()
  
Feedback
/# re: java.net.SocketException: Too many open files 问题的解决办法
2011-03-08 11:10 | 212 212121  回复  更多评论
  
/# re: java.net.SocketException: Too many open files 问题的解决办法[未登录]
2011-11-24 12:58 | 11
不错   回复  更多评论
  
刷新评论列表
 博问 - 解决您的IT难题
IT新闻:
· 印度35美元平板机出师不利
· Firefox领先Windows,Chrome领先Linux
· 物理是一个NP-hard问题
· 优酷网与CCTV6电影网再签署一年合作协议
· Bottlenose:将数据可视化融入社交网络运营中  博客园首页  IT新闻  IT问答  程序员招聘 标题  请输入标题 姓名  请输入你的姓名 主页 请输入验证码 验证码 /* 
 内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
请输入评论内容 Remember Me?   登录  使用高级评论  新用户注册  返回页首  恢复上次提交       [使用Ctrl+Enter键可以直接提交]  
  博客园首页随笔:
· 游戏运营技术之---玩家关系管理(PRM)--〉推进虚拟营销
· 建立完善的日期定义表
· 《人月神话》摘要
· C++标准编程:虚函数与内联
· 莫蹭网:“黑客”怎样伪造wifi钓你(Windows平台) 博客园   IT新闻   BlogJava   博客生活   C++博客   PHP博客   相关文章:
Powered by:
IT博客 
Copyright ©2012 TRE-China R&D