プライマリ・コンテンツに移動
Oracle® Traffic Director管理者ガイド
11g リリース1 (11.1.1.9)
B66436-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

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

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

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

たとえば、HTTP処理スレッドの最大数 * 4は、プロセスに有効なファイル・ディスクリプタの最大数より少ないことが理想です。HTTP処理スレッドの最大数を増やす場合、それに応じてTraffic Directorに使用できるファイル・ディスクリプタの合計数も増やしてください。(たとえば、ファイル・ディスクリプタ制限が65536に設定されている場合にHTTP処理スレッドの最大数を20000に設定すると、最適なチューニングを得られません。これは、ワーカー・スレッド用として80000 (20000*4=80000)がファイル・ディスクリプタを使い切って/予約してしまい、他のサブシステム用に残るファイル・ディスクリプタが少なくなるためです。)そのため、HTTPリクエスト処理スレッドの最大数に高い値を設定する場合は、必ず事前にテストを行ってください。

図15-1は、構成の拡張設定でHTTP処理スレッドの最大数を増やす方法を表しています。

図15-2 HTTP処理スレッドの最大数

図15-2の説明が続きます
「図15-2 HTTP処理スレッドの最大数」の説明

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

$ 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.10.1項「単一のプロセスで開くファイル(ファイル・ディスクリプタの制限)」を参照してください。


ほとんどのオペレーティング・システムでは、プロセス(Oracle Traffic Directorなど)で使用可能なファイル・ディスクリプタの最大数の制限をシステム管理者が構成できるようにしています。Linuxマシンでは、この制限は通常ulimit -nで、システムにログインするとき、または単にアプリケーションを開始するときに設定されます。システム管理者は、Oracle Traffic Directorサーバー・インスタンスを開始する前に、この制限(通常、ulimit -nによる制限)が少なくとも32276以上のファイル・ディスクリプタ(または、スループットの高いシステムでは65536)に設定されていることを確認する必要があります。

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

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

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