32.8. 大量のリクエストを受信するアプリケーションのチューニング
Web サーバーなど、大量の受信リクエストを処理するアプリケーションを実行する場合、パフォーマンスを最適化するために Red Hat Enterprise Linux をチューニングすることが必要になる場合があります。
32.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 ジャーナルに記録します。 - 多数の接続試行は有効なソースからのものであり、攻撃によって引き起こされたものではありません。
手順
チューニングが必要かどうかを確認するには、影響を受けるポートの統計を表示します。
# 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) より大きい場合、リッスンバックログはまだ十分大きくないため、チューニングが必要です。オプション: 現在の TCP リッスンバックログ制限を表示します。
# sysctl net.core.somaxconn net.core.somaxconn = 4096/etc/sysctl.d/10-socket-backlog-limit.confファイルを作成し、り大きなリッスンバックログ制限を設定します。net.core.somaxconn = 8192アプリケーションは
net.core.somaxconnカーネルパラメーターで指定したよりも多くのリッスンバックログを要求することができますが、カーネルはこのパラメーターで設定した番号にアプリケーションを制限することに注意してください。/etc/sysctl.d/10-socket-backlog-limit.confファイルから設定をロードします。# sysctl -p /etc/sysctl.d/10-socket-backlog-limit.conf新しいリッスンバックログ制限を使用するようにアプリケーションを再設定します。
-
アプリケーションが制限の config オプションを提供している場合は、それを更新します。たとえば、Apache HTTP サーバーには、このサービスのリッスンバックログ制限を設定するための
ListenBacklog設定オプションが用意されています。 - 制限を設定できない場合は、アプリケーションを再コンパイルします。
重要net.core.somaxconnカーネル設定とアプリケーションの設定の両方を常に更新する必要があります。-
アプリケーションが制限の config オプションを提供している場合は、それを更新します。たとえば、Apache HTTP サーバーには、このサービスのリッスンバックログ制限を設定するための
- アプリケーションを再起動します。
検証
-
Systemd ジャーナルを監視して、
possible SYN flooding on port <port_number>エラーメッセージがさらに発生していないかどうかを確認します。 バックログ内の現在の接続数を監視し、ソケットバックログと比較します。
# 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) より大きい場合、リッスンバックログが十分に大きくないため、さらなるチューニングが必要です。