Red Hat Training

A Red Hat training course is available for RHEL 8

34.8. 大量のリクエストを受信するアプリケーションのチューニング

Web サーバーなど、大量の受信リクエストを処理するアプリケーションを実行する場合、パフォーマンスを最適化するために Red Hat Enterprise Linux をチューニングすることが必要になる場合があります。

34.8.1. 多数の TCP 接続試行を処理するための TCP リッスンバックログの調整

アプリケーションが LISTEN 状態で TCP ソケットを開くと、カーネルは、このソケットが処理できる許可されるクライアント接続の数を制限します。クライアントが、アプリケーションが処理できるよりも多くの接続を確立しようとすると、新しい接続が失われるか、カーネルが SYN Cookie をクライアントに送信します。

システムが通常のワークロード下にあり、正規のクライアントからの接続が多すぎるためにカーネルが SYN Cookie を送信する場合は、Red Hat Enterprise Linux (RHEL) をチューニングしてこれを回避します。

前提条件

  • RHEL は、possible SYN flooding on port <ip_address>:<port_number> エラーメッセージを Systemd ジャーナルに記録します。
  • 多数の接続試行は有効なソースからのものであり、攻撃によって引き起こされたものではありません。

手順

  1. チューニングが必要かどうかを確認するには、影響を受けるポートの統計を表示します。

    # ss -ntl '( sport = :443 )'
    State    Recv-Q   Send-Q   Local Address:Port   Peer Address:Port  Process
    LISTEN   650      500      192.0.2.1:443        0.0.0.0:*

    バックログ (Recv-Q) 内の現在の接続数がソケットバックログ (Send-Q) より大きい場合、リッスンバックログはまだ十分大きくないため、チューニングが必要です。

  2. オプション: 現在の TCP リッスンバックログ制限を表示します。

    # sysctl net.core.somaxconn
    net.core.somaxconn = 4096
  3. /etc/sysctl.d/10-socket-backlog-limit.conf ファイルを作成し、り大きなリッスンバックログ制限を設定します。

    net.core.somaxconn = 8192

    アプリケーションは net.core.somaxconn カーネルパラメーターで指定したよりも多くのリッスンバックログを要求することができますが、カーネルはこのパラメーターで設定した番号にアプリケーションを制限することに注意してください。

  4. /etc/sysctl.d/10-socket-backlog-limit.conf ファイルから設定をロードします。

    # sysctl -p /etc/sysctl.d/10-socket-backlog-limit.conf
  5. 新しいリッスンバックログ制限を使用するようにアプリケーションを再設定します。

    • アプリケーションが制限の config オプションを提供している場合は、それを更新します。たとえば、Apache HTTP サーバーには、このサービスのリッスンバックログ制限を設定するための ListenBacklog 設定オプションが用意されています。
    • 制限を設定できない場合は、アプリケーションを再コンパイルします。
  6. アプリケーションを再起動します。

検証

  1. Systemd ジャーナルを監視して、possible SYN flooding on port <port_number> エラーメッセージがさらに発生していないかどうかを確認します。
  2. バックログ内の現在の接続数を監視し、ソケットバックログと比較します。

    # ss -ntl '( sport = :443 )'
    State    Recv-Q   Send-Q   Local Address:Port   Peer Address:Port  Process
    LISTEN   0        500      192.0.2.1:443        0.0.0.0:*

    バックログ (Recv-Q) 内の現在の接続数がソケットバックログ (Send-Q) より大きい場合、リッスンバックログが十分に大きくないため、さらなるチューニングが必要です。

関連情報