キープアライブ使用時のエラー "Too many open files" のトラブルシューティング
search cancel

キープアライブ使用時のエラー "Too many open files" のトラブルシューティング

book

Article ID: 281462

calendar_today

Updated On:

Products

CA API Gateway

Issue/Introduction

エラー "Too many open files"(開いているファイルが多すぎます)は、KB 281461 で解決できます。この KB 記事はエラーに対する回避策ですが、将来的にはこの問題が再発する可能性があります。これは、Keep-Alive が使用されている場合に関係します。

Environment

API Gateway のサポートされているすべてのバージョン

Cause

  • 一定期間にわたって開いているファイルの数を監視して、ファイルが増加しているかどうかを確認し、非常に多くのファイルを開いている原因を特定することをお勧めします。以下の2つのコマンドを実行します。最初のコマンドは lsof の結果を '~/Desktop/lsof.log' に出力し、2 番目のコマンドは最も多くのファイルを開いている上位 20 のプロセスを表示します。これらについてはインターネット上の情報で詳しく説明されています。

    # lsof > ~/Desktop/lsof.log 
    # cat ~/Desktop/lsof.log | awk '{ print $2 " " $1; }' | sort -rn | uniq -c | sort -rn | head -20
  • 開いているファイルを監視し、Gateway が多数のファイルを開いていることが判明した場合、それは "Keep-Alive" に関連している可能性があります。これは "Route via HTTP(s)" アサーションの[HTTP]タブ内で使用されます。
  • プロキシが構成されている場合、"Proxy-Connection: Keep-Alive" ヘッダーが Gateway によって追加されます。これは、Apache HttpComponents と HttpClient ライブラリによって行われます。これは標準ヘッダーではありませんが、ブラウザーやプロキシで広く使用されています。その理由は、クライアントが HTTP/1.0 接続ヘッダーを送信している場合、一部のプロキシがこのヘッダーをバックエンドサーバーに盲目的に転送する可能性があり、サーバーがクライアント接続のプロパティとプロキシ接続のプロパティで混乱する可能性があるためです。
    この状況を回避するために、リクエストがプロキシを通過することをクライアント/Gatewayが認識すると、Connection ヘッダーが Proxy-Connection に置き換えられます。したがって、プロキシがヘッダーをやみくもにサーバーに転送している場合でも、それは単に無視されます。"Proxy-Connection: Keep-Alive" ヘッダーが存在する場合、ほとんどのプロキシは、接続が閉じられるように応答とともに "Proxy-Connection:Close" を送り返します。

Resolution

この状況では、プロキシが "Proxy-Connection:Close" の応答の送信に失敗し、"Too many open files" エラー ログがトリガーされる可能性があります。

"Route Via HTTP(s)" アサーションに手動で "Proxy-Connection:Close" ヘッダーを追加すると、開いている接続が閉じられ例外が表示されなくなります。

Additional Information

CentOS 7 / RHEL 7 - lsof コマンドが見つからない場合は手動でインストールしてください。

関連:  KB 281461

[英文文書] Troubleshooting the "Too many open files" Error When Keep-Alives Are Used