- - PR -
Too many open files
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-22 13:46
URLクラスを使用してJarファイルから
ファイルの取得、読み込みを行っているのですが、 2048ファイルぐらい読み込むとでIOExceptionが発生し、 スタックトレースを見るとToo many open filesが出てしまいます。 使用後のファイルは必ずfinallyでcloseしているのですが、 何か問題があるのでしょうか? ソースはこんな感じです。 try{ url = new URL( "jar:"+pa.getCodeBase().toString()+strJN+"!/"+strFN); URLConnection urlc = url.openConnection(); urlc.setUseCaches(true); InputStream is = urlc.getInputStream(); DataInputStream dis = new DataInputStream(is); //読み込み処理 ・ ・ } cahtc(・・・){ } finally{ url = null; urlc = null; if ( disObj != null ) { disObj.close(); disObj = null; } if( is != null ){ is.close(); is = null; } } |
|
投稿日時: 2005-11-22 14:09
・BEA トラブルシューティング ガイド サポート診断パターン > Too many open files
http://www.beasys.co.jp/cs/support_news/product_troubleshooting/Too_Many_Open_Files_Pattern.html |
|
投稿日時: 2005-11-22 16:37
自己レスです。
理由もわからないままなぜか解決したんですが・・・ キャッシュの設定の以下の行を urlc.setUseCaches(true); キャッシュしないように以下の様に設定したら urlc.setUseCaches(false); ProcessExplorerで見ても正しくcloseされました。 |
|
投稿日時: 2005-11-22 23:22
「キャッシュ」という仕組みは一般に、メモリリソースに余裕がある間は
リソースをメモリ上に確保するというものですので、自然な動作かと思い ますよ。 ファイルポインタオブジェクト自身はあまりメモリは食いませんので、 キャッシュ機能が2048ファイル程度を全てopenした状態でキャッシュする ことは、十分可能かとおもいます。 一方で、一つのプロセスが同時にOpenできるファイルの最大数というのは OSレベルの設定で決まっている値です。 |
1