- PR -

Too many open files

1
投稿者投稿内容
rviper
常連さん
会議室デビュー日: 2004/06/15
投稿数: 34
投稿日時: 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;
}
}
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 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
rviper
常連さん
会議室デビュー日: 2004/06/15
投稿数: 34
投稿日時: 2005-11-22 16:37
自己レスです。
理由もわからないままなぜか解決したんですが・・・

キャッシュの設定の以下の行を
urlc.setUseCaches(true);

キャッシュしないように以下の様に設定したら
urlc.setUseCaches(false);

ProcessExplorerで見ても正しくcloseされました。

シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-11-22 23:22
「キャッシュ」という仕組みは一般に、メモリリソースに余裕がある間は
リソースをメモリ上に確保するというものですので、自然な動作かと思い
ますよ。

ファイルポインタオブジェクト自身はあまりメモリは食いませんので、
キャッシュ機能が2048ファイル程度を全てopenした状態でキャッシュする
ことは、十分可能かとおもいます。

一方で、一つのプロセスが同時にOpenできるファイルの最大数というのは
OSレベルの設定で決まっている値です。
1

スキルアップ/キャリアアップ(JOB@IT)