• ベストアンサー

Linux ファイルディスクリプタの変更

現在、Javaで開発されたアプリケーションのシステム運用を行っています。 (OSはLinux、APサーバーはTomcatを使用) あるバグ解析のため、ログ出力を追加したところ Socket Exception:Too many open filesが発生しました。 対応を調べたところ、ファイルディスクリプタを増やして対応とありましたので ファイルディスクリプタを増やして対応しようと思います。 ここで疑問なのですがファイルディスクリプタは何を基準に増減値を決定するのか また、ファイルディスクリプタを変更する際に発生しうる問題は何かあるのでしょうか? 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

> あるバグ解析のため、ログ出力を追加したところ > Socket Exception:Too many open filesが発生しました。 それ、むしろログ出力のコードで close() し忘れのバグ混入してないですか? 先に open 中の fd list 見て変なところないか確認してからの方がいい気がします。

babolat0831
質問者

補足

log4Jを利用しログを出力しています。 その際にもクローズ処理を行うのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.2

上限は、普通は1024です。bashの ulimit -n で表示できます。 同時に1024のファイルをオープンすることは考えられないため、プログラムバグでcloseもれがあると思われます。デバッグしましょう。 バグがあるままでは、いくら上限を大きくしても駄目だし、そもそも正しく出力されません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • log4jの使用方法について

    現在、Javaで開発されたアプリケーションのシステム運用を行っています。 (OSはLinux、APサーバーはTomcatを使用) あるバグ解析のため、ログ出力(log4jを使用)を追加したところ Socket Exception:Too many open filesが発生しました。 原因はログ出力した際のファイルクローズ漏れでは?と指摘を受けました。 log4jのログ出力機能を使用した際にはクローズ処理は必要なのでしょうか? 以上、よろしくお願いします。

  • 今の時間gooで検索出来ますか?

    gooで今検索するとなぜかエラーが出るのですが 500 Servlet Exception java.io.FileNotFoundException: /usr/local/​www/htdocs/META-INF/MANIFEST.MF​ (Too many open files) 以下英語がズラっと並んでいます。 他のhpは見えますしgooメールも使えます。 皆さんは正常な状態で見れていますでしょうか?

  • iPhoneアプリ error = 24

    iPhoneのアプリを自作してみたのですが AVAudioPlayerでcafを再生させる処理が多い所為か 何度もアクションを実行していると途中で音声がでなくなってしまいます iPhone 4ではそういったバグが見られないのですが iPhone 3GSやXcodeのエミュレーターではバグが発生します メモリリークの問題だと思い - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {} に[player release];を書き込んでみたりしましたが結局バグは発生してしまいました (書き込む前は実行回数20~30の間でバグが発せしていましたが 書き込み後は実行数30~40の間で発生するようになりました) コンソールを表示させて行ったところバグ発生後に error = 24 (Too many open files) というエラーが表示されました。 どのようにすればバグが改善されるのでしょうか?

  • 自動起動のサーバーのtoo many open filesについて

    socket通信の簡単なサーバーを作っているのですが、クライアントの数が多くなるとtoo many open filesと出てしまい、困っています。 普通に(sshでログインして)サーバーを起動すると、2000以上のクライアントを受け付けることができるのですが、同じ物をinittabやrc.localから起動すると、1000付近で上記のエラーが出て、それ以上の接続を受け付けなくなってしまいます。 lsofでディスクリプタの数を数えると、1080で止まるようでした。ソケットだけなら1000に届いていないと思います。 色々と設定を変えてみたのですが、自分では原因を追及できませんでした。 ご存じの方、何卒対策を教えていただけないでしょうか。 よろしくお願い致します。 環境は、Fedora Core 5(2.6.15-1.2054_FC5)、ファイルディスクリプタ関連の設定は > ulimit -n 65535 > cat /proc/sys/fs/file-max 65535 > cat /proc/sys/net/core/somaxconn 10240 となっています。

  • JSP側でBeasを使用するとエラーが!?

    j2sdk1.4.0とtomcat4.1.18を使用しています。 JSP側のファイルMyJSPから自分で作成したクラスMyItemクラスをBeansで呼び出して使用したいのですがtomcatを起動し、Internet Explorerからhttp://localhost:8080/renshu/MyJSPを実行すると、 HTTP Status 500 - type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: JSPのクラスをコンパイルできません・・・ というようなエラーがでてしまいます。 MyJSPのファイル側では <%@ page import="MyItem, java.util.*" contentType="text/html; charset=Shift_JIS" %> <jsp:useBean id="item" class="MyItem" />  ・・・ のように宣言しています。 MyJSPのファイル場所は c:\Program Files・・・webapps\renshu\MyJSP.jsp MyItem.javaのファイル場所は c:\Program Files・・・webapps\renshu\web-inf\classes\MyItem.java の場所にそれぞれ置いてあります。 以前tomcat3.3.1を使用していた時は、エラーなく表示されていたのですが、tomcat4.1.18にバージョンアップしたら、エラーが発生してしまいました。ちなみに、tomcat4.1.18にバージョンアップした後でMyItem.javaファイルのコンパイルは通常にできました。なので、環境設定には問題ないと思われます。tomcat4.1.8は新たに追記でBeansを使用する時に何か宣言しなければならないのでしょうか?

    • ベストアンサー
    • Java
  • TomCatが動作しません

    【JDK】 java version "1.5.0_07" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03) Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode, sharing) InstallDir F:\jdk 【TomCat】 Version 5.5.17 InstallDir F:\Program Files\Apache Software Foundation\Tomcat 5.5 JVM F:\jdk\jre\bin\server\jvm.dll 【環境変数】 CATALINA_HOME F:\Program Files\Apache Software Foundation\Tomcat 5.5 CLASSPATH F:\jdk\lib JAVA_HOME F:\jdk 以上の設定で、TomCatが動作しません。 (http://localhost:8080/にアクセス出来ない) catalina.xx.logを見ると以下のようなエラーが発生しています(詳細は省略)。 致命的: エンドポイントを初期化中のエラーです 致命的: Catalina.start LifecycleException: プロトコルハンドラの初期化に失敗しました: java.lang.Exception: Socket bind failed: [730048] ???A?e?\?P?b?g ?A?h???X???μ??v???g?R???A?l?b?g???[?N ?A?h???X?A?????|?[?g???? 1 ?? ?????g?p??≪??・?B 情報: XML検証は無効です 致命的: エンドポイントを起動中のエラーです 致命的: Catalina.start: LifecycleException: service.getName(): "Catalina"; プロトコルハンドラの起動に失敗しました: java.lang.Exception: Socket bind failed: [730048] ???A?e?\?P?b?g ?A?h???X???μ??v???g?R???A?l?b?g???[?N ?A?h???X?A?????|?[?g???? 1 ?? ?????g?p??≪??・?B これは、どうすれば良いのでしょうか? 宜しくお願い致しますm(_ _)m

    • ベストアンサー
    • Java
  • Javaサーブレット開発環境について

    学校でサーブレットの勉強をしているのですが、家でもやろうとしてTomcatをパソコンに入れたのですが、サーブレットだけで次のようなエラーが発生します。 例外 javax.servlet.ServletException: サーブレットインスタンスを割り当て中のエラーです 環境変数は CATALINA_HOME C:\Program Files\Apache Software Foundation\Tomcat 5.0 CLASSPATH .;C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib\servlet-api.jar;C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\s\WEB-INF\classes JAVA_HOME C:\j2sdk1.4.2_10 PATH C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\s; ちなみにサーブレットのファイルは C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\s\WEB-INF\classes に入れてあります。 どなたかよろしくお願いします。

  • サイト閲覧中に「500 Too Many Files Open」と表示される

    いつもお世話になっております。 会社の業務上、とあるサイト(ラーニング系)にアクセスする必要があるのですが、同僚がJAVAのアップデートを行なったらしく(PCの知識はほとんどなし)、それ以前は閲覧できていたページが、表題の ------------------------------------------------ 500 Too Many Files Open Java・・・ : : ------------------------------------------------ とテキスト表示されてしまうようになり、困っています。 リブートしてもダメでした。 JAVAのランタイムを再インストールしようかと思い、プログラムの追加と削除を実施しようとしたところ、「権限なし」でストップします(だったらなぜアップデートできたのか?と思いましたが詳細は私自身の知識不足もあり、不明)。 他の同様のスペックのパソコンでは閲覧可能ですので、やはりJAVAアップデートが悪いのではないかと思います。 解決できないかと色々「Too Many Files Open」で検索してみましたが、コーディングの注意点ばかりヒットしてしまい、閲覧(使用)者側の対処方法が見つかりません。 自分でコーディングしたものではないので、OSやブラウザの設定変更くらいしか思いつかないのですが、なんとかなるなら救済してあげたいのです。 思い当たる解決策などございましたら、ご教授いただけると幸いです。

  • Tomcatがサービス起動しない

    Servlet,JSPでシステムを構築しています。 Tomcatをインストールしたところ,なぜか%CATALINA_HOME%\bin\startup.batからでないと起動しません。管理ツールのサービスから起動しようとすると「サービス起動中にエラーが発生しました」と出て起動ができません。 開発用クライアントやサーバではそのような問題は出ていないのですが,本稼動用のサーバでのみそういった症状がでます。原因が良くわからずに困っています。 ------------------------- JAVA SDK 1.4.2 Tomcat 5.0.19 OS:Windows2000 Server Apache 2.0.49 JAVA_HOME=C:\j2sdk1.4.2 CATALINA_HOME=C:\Progra~1\Apache~1\Tomcat~1.0 (C:\Program Files\Apache Software Foundation\Tomcat 5.0)です。 ----------------------------

  • サーブレットでFileWriterクラスの出力先変更。

    サーブレットでFileWriterクラスの出力先変更。 はじめて質問させていただきます。 サーブレットでFileWriterクラスを利用して ログを出力していますが 出力変更設定がわかりません。 現在は C:\Program Files\Apache Group\Tomcat 4.1に出力されます。 お手数ですがご教授お願い致します。 ソース try{ // デバッグモードでない時はファイル出力なし、デバッグ時のみファイル出力する if ( dbg_flag == false ){ return; } String strMsg = DateFormat.getDateTimeInstance().format(new Date()) + "[" + clsname + "]" + msg; System.out.println(strMsg); // ファイルライターを開く fw = new FileWriter(filename,true); // ファイルライターに書き込み fw.write(strMsg + "\n"); // フラッシュする fw.flush(); } catch(Exception ex){ return; } finally{ try { // 最後にファイルライターを閉じる if( fw != null) fw.close(); } catch(Exception ex){ return; } } java 1.3.1_01 tomcat 1.4

    • ベストアンサー
    • Java