ホームページ > 運用・保守 > Linuxの運用と保守 > Linux カーネルパラメータを最適化する方法

Linux カーネルパラメータを最適化する方法

WBOY
リリース: 2023-05-11 18:58:21
転載
2778 人が閲覧しました

Nginx サービスは高性能なオペレーティング システムに依存しているため、高性能な WEB サーバーとしては、Nginx 自体のパラメーターを調整するだけでは十分ではありません。
以下に、一般的な Linux カーネル パラメーターの最適化方法をいくつか示します。

  • net.ipv4.tcp_max_tw_buckets

tcp 接続の場合、サーバーとクライアントが通信を完了するとステータスが変わりますtimewait 、特定のサーバーが非常にビジーで、特に多数の接続がある場合、timewait の数はますます大きくなります。
結局のところ、一定量のリソースも占有するため、最大値が存在する必要があります。この値を超えると、システムは最も古い接続を削除し、常に桁違いに維持されるようにします。
この値は、パラメータ net.ipv4.tcp_max_tw_buckets によって決定されます。
CentOS7 システムでは、sysctl -a |grep tw_buckets を使用して値を表示できます。デフォルトは 32768 です。
8000 に調整するなど、適切に下げることができます。結局のところ、この状態では接続が多すぎます。問題が発生し、リソースが消費されます。
ただし、この状態の TCP 接続も便利なので、数十や数百に調整しないでください。
同じクライアントが再度サーバーと通信する場合、新しい接続を再度確立する必要はありません。この古いチャネルを使用して、時間と労力を節約してください。

  • net.ipv4.tcp_tw_recycle = 1

このパラメータの機能は、timewait 内で接続を迅速にリサイクルすることです。州。システムが timewait 状態の接続を自動的に削除すると上で述べましたが、そのような接続が再利用された方がよいのではないでしょうか。
したがって、このパラメータを 1 に設定すると、timewait 状態の接続をすぐにリサイクルできます。これは、次のパラメータと組み合わせて使用​​する必要があります。

  • net.ipv4.tcp_tw_reuse = 1

timewait 状態の接続を再利用するには、このパラメータを 1 に設定します。新しい TCP 接続の場合は、上記のパラメータと組み合わせて使用​​する必要があります。

  • net.ipv4.tcp_syncookies = 1

TCP 3 ウェイ ハンドシェイクで、クライアントは syn を開始します。サーバーへのリクエストを受信すると、サーバーは ACK 確認とともにクライアントへの syn リクエストも開始します。
クライアントがリクエストの送信後にサーバーから直接切断し、サーバーによって開始されたリクエストを受け入れない場合サーバーの場合、サーバーは再起動します。複数回試行します。
この再試行プロセスは、一定期間 (通常は 30 秒以上) 続きます。この状態の接続数が非常に多い場合、サーバーは大量のリソースを消費します。
正常 接続できません この悪意のある半接続動作は、実際には syn フラッド攻撃と呼ばれます。
SYN Cookie を有効にするには 1 に設定します。これにより、前述の syn フラッド攻撃を回避できます。
このパラメータをオンにすると、サーバーはクライアントの ack を受信した後、クライアントに ack syn を送信する前に、短時間内にシリアル番号で応答するようクライアントに要求します。シリアル番号または提供されたシリアル番号が間違っています。クライアントが不正であると考えられるため、ack syn はクライアントに送信されず、再試行する必要はありません。

  • net.ipv4.tcp_max_syn_backlog

このパラメータは、システムが接続する半接続 TCP 接続の最大数を定義します。お受けできます。クライアントは syn パケットをサーバーに送信します。サーバーはそれを受信すると、それを記録します。

このパラメーターは、そのような接続を最大でいくつ記録できるかを決定します。 CentOS7 では、デフォルトは 256 です。syn フラッド攻撃が発生した場合、この値が小さすぎるとサーバーが麻痺しやすくなります。
実際には、サーバーはあまり多くのリソース (CPU、メモリ) を消費しません。 , など)をこの時点で設定しているので、適切に調整できます(たとえば 30,000 に調整します)。

  • net.ipv4.tcp_syn_retries

このパラメータはクライアントに適用され、syn を開始する際の最大再試行回数を定義します。回数は、デフォルトは 6 ですが、2 に変更することをお勧めします。

  • net.ipv4.tcp_synack_retries

このパラメータはサーバーに適用され、開始される同期の最大重みを定義します。試行回数、デフォルトは 5 ですが、syn フラッド攻撃を適切に防止できる 2 に変更することをお勧めします。

  • #net.ipv4.ip_local_port_range

  • このパラメータはポート範囲を定義します。システムのデフォルトの予約ポートは 1024 です。上の部分はカスタムポートです。このパラメータはクライアントに適用されます。
クライアントがサーバとの接続を確立するとき、たとえば、サーバのポート 80 にアクセスすると、クライアントはランダムにポートを開き、サーバとの接続を開始します。

このパラメータは、次の内容を定義します。ランダムなポート範囲。デフォルトは 32768 61000 ですが、1025 61000 に調整することをお勧めします。

  • net.ipv4.tcp_fin_timeout

TCP 接続状態のうち、クライアント側の状態は FIN-WAIT-2 状態です。これは、状態が timewait に変わる前の状態です。
このパラメータは、どのプロセスにも属さない接続ステータスのタイムアウト期間を定義します。デフォルト値は 60 ですが、6 に調整することをお勧めします。

  • net.ipv4.tcp_keepalive_time

TCP 接続ステータスのうち、1 つは確立されたステータスであり、このステータスになって初めて、クライアントとサーバーは通信できるようになります。通常、通信が完了すると、
クライアントまたはサーバーは相手に接続を閉じるように指示し、ステータスは timewait に変わります。クライアントがサーバーに指示しない場合は、
およびサーバーはクライアントにも通知しません。クライアントが閉じている場合 (たとえば、クライアント側が切断されている場合)、このパラメータは決定する必要があります。
たとえば、クライアントは切断されましたが、サーバー上の接続ステータスはまだ確立されています。クライアントが切断されているかどうかを確認するために、サーバー
は時々検出パケットを送信して、相手がオンラインかどうかを確認します。この時間はこのパラメータによって決まります。デフォルト値は 7200 秒ですが、30 秒に設定することをお勧めします。

  • #net.ipv4.tcp_keepalive_intvl

#このパラメータは上記のパラメータと同じです。サーバーは次の時点で実行されます。指定された時間。クライアントがオンラインかどうかを確認するためにプローブが開始されます。クライアントが確認しない場合、

サーバーは、現時点では相手がオンラインではないと判断できず、複数回試行する必要があります。このパラメータは、プローブを再送信する時間、つまり相手側の問題を最初に発見した後、プローブを再度開始するまでにかかる時間を定義します。
デフォルト値は 75 秒ですが、3 秒に変更できます。

  • #net.ipv4.tcp_keepalive_probes

  • #10 番目と 11 番目のパラメータは、プローブを開始するタイミングとプローブの期間を指定します。失敗後に検出が開始されるまでに時間がかかりますが、終了するまでに何回検出されるかは定義されていません。
このパラメータは、検出を開始するパケットの数を定義します。デフォルトは 9 ですが、2 に設定することをお勧めします。

設定と例
Linux でカーネル パラメータを調整するには、構成ファイル /etc/sysctl.conf を直接編集し、sysctl -p コマンドを実行して有効にします。

上記の各カーネル パラメータの分析と組み合わせると、例は次のようになります。

以上がLinux カーネルパラメータを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート