ヘッダーをスキップ
Oracle® Traffic Director管理者ガイド
11g リリース1 (11.1.1.7.0)
B66436-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

15.2 ファイル・ディスクリプタ制限のチューニング

オペレーティング・システムでは、ファイル・ディスクリプタを使用して、ファイルシステムのファイル、および接続やリスナー・ソケットなどの擬似ファイルを処理します。

Oracle Traffic Directorインスタンスの起動後、ファイル・ディスクリプタ関連の値の自動構成が行われる際に、次のパラメータが考慮されます。

ファイル・ディスクリプタを必要とする主要なOracle Traffic Directorオブジェクトは、キープ・アライブ接続、キューに入れられた接続、およびオリジン・サーバーへの接続です。これらのオブジェクトの制限を明示的に指定しない場合、Oracle Traffic Directorインスタンスが起動すると、制限(最大キープ・アライブ接続、接続キューのサイズ、および各オリジン・サーバーの最大接続数)が、システム内で使用可能なファイル・ディスクリプタの合計数に基づいて自動的に構成されます。

ファイル・ディスクリプタ制限に異常に高い値が設定されている場合、未指定のパラメータの自動構成が原因でOracle Traffic Directorインスタンスがメモリーを過剰消費したり、最適な構成を得られないことがあります。この問題を回避するため、ファイル・ディスクリプタ制限が高いシステムではこれらのパラメータ値を明示的に指定します。

たとえば、max-threads * 4がプロセスで利用できる最大ファイル・ディスクリプタ数よりも小さくなるのが理想です。たとえば、ファイル・ディスクリプタ制限が65536に設定されている場合にmax-threadsを20000に設定すると、最適なチューニングを得られません。これは、ワーカー・スレッド用として80000 (20000*4=80000)がファイル・ディスクリプタを使い切って/予約してしまい、他のサブシステム用に残るファイル・ディスクリプタが少なくなるためです。そのため、max-threadsに高い値を設定する場合は、何回かテストを行ったうえで設定する必要があります。

割り当てられたファイル・ディスクリプタ数は、システムでサポート可能な制限を超えられません。ファイル・ディスクリプタの現在のシステム制限を確認するには、次のコマンドを実行します。

$ cat /proc/sys/fs/file-max
2048

使用可能なファイル・ディスクリプタのうち現在使用されている数を確認するには、次のコマンドを実行します。

$ cat /proc/sys/fs/file-nr

このコマンドによって、次のような出力が返されます。

625 52 2048

この例では、625は割当て済ファイル・ディスクリプタ数、52は空きの割当て済ファイル・ディスクリプタ数、2048はシステムでサポートされているファイル・ディスクリプタの最大数です。


注意:

Solarisでは次のコマンドを使用して、システム全体で使用中のファイル・ディスクリプタを検出できます。

# echo ::kmastat | mdb -k | grep file_cache

このコマンドによって、次のような出力が返されます。

file_cache        56    1154   1305      73728B   659529     0

この例では、1154が使用中のファイル・ディスクリプタの数、1305が割当済のファイル・ディスクリプタの数です。Solarisでは、オープン・ファイル・ディスクリプタの最大数の設定がないことに注意してください。RAMに空き領域があるかぎり、要求に応じて割り当てられます。


割当て済ファイル・ディスクリプタがシステムの制限に達すると、ファイルを開くときに次のエラー・メッセージがシステム・コンソールに表示されます。

Too many open files in system.

次のメッセージがサーバー・ログに書き込まれます。

[ERROR:16] [OTD-10546] Insufficient file descriptors for optimum configuration.

これは、システムではこれ以上ファイルを開くことができないという重大な問題です。この問題を回避するために、ファイル・ディスクリプタ制限を合理的な数まで増やすことを検討してください。

Linuxでファイル・ディスクリプタ数を変更するには、次の操作をrootユーザーとして行います。

  1. 次の行を/etc/sysctl.confファイルで編集します。

    fs.file-max = value
    

    valueは、設定する新しいファイル・ディスクリプタ制限です。

  2. 次のコマンドを実行して、変更を適用します。

    # /sbin/sysctl -p
    

    注意:

    Solarisでは、/etc/systemファイルのrlim_fd_maxの値を変更して、1つのプロセスで開いた可能性があるファイル・ディスクリプタにハード面での制限を指定します。この制限をオーバーライドするには、スーパーユーザー特権が必要です。同様に、rlim_fd_curは、1つのプロセスが開くことのできるファイル・ディスクリプタにソフト面での制限を指定します。プロセスは、そのファイル・ディスクリプタの制限を、setrlimit()コールを使用するか、実行中のシェルでlimitコマンドを実行することにより、rlim_fd_maxで定義したハード面の制限値までの任意の値に調整できます。ハード面の制限の範囲内で値を調整する場合には、スーパーユーザー特権は必要ありません。

    たとえば、ハード面の制限値を上げるには、/etc/systemに次のコマンドを追加して、1回再起動します。

    set rlim_fd_max = 65536
    

    Solarisのファイル・ディスクリプタの設定の詳細は、第15.13.1項「単一のプロセスで開くファイル(ファイル・ディスクリプタの制限)」を参照してください。


thumbのおおよそのルールとして、thread-pool要素、max-threads * 4がプロセスで利用できる最大ファイル・ディスクリプタ数よりも小さくなるようにするというルールがあります。これはつまり、max-threadsを最大ファイル・ディスクリプタ数の1/5未満にするということです。

たとえば、ファイル・ディスクリプタ制限が65536に設定されている場合にmax-threadsを20000に設定すると、最適なチューニングを得られません。これは、ワーカー・スレッド用として20000*4=80000がファイル・ディスクリプタを使い切って/予約してしまい、他のサブシステム用にファイル・ディスクリプタがほとんど残らないためです。

max-threadsに高い値を設定する場合は、必ず事前にテストを行ってください。1つのプロセスに数万のスレッドが存在する状態はパフォーマンスに影響を及ぼすことがあります。