Nginx10m+の高並列カーネル最適化に関する簡単な説明

Nginx10m+の高並列カーネル最適化に関する簡単な説明

高い同時実行性とは何ですか?

  • デフォルトの Linux カーネル パラメータは、最も一般的なシナリオ向けに設計されており、高同時アクセスをサポートする Web サーバーには適していません。したがって、Nginx のパフォーマンスを向上させるには、Linux カーネル パラメータを変更する必要があります。
  • カーネルを最適化する際にできることはたくさんありますが、通常はビジネスの特性に応じて調整します。Nginx を静的 Web コンテンツ サーバー、リバース プロキシ、または圧縮を提供するサーバーとして使用する場合、カーネル パラメータの調整は異なります。ここでは、Nginx がより多くの同時リクエストをサポートできるようにする最も一般的な TCP ネットワーク パラメータの簡単な構成を行います。
  • カーネルパラメータを変更するには、/etc/sysctl.conf を変更する必要があります。

設定方法

構成の詳細

# 単一のプロセスが開くことができるハンドルの最大数を示します。

fs.ファイル最大 = 999999

#パラメータを 1 に設定すると、TIME_WAIT 状態のソケットを新しい TCP 接続に再利用できます。TIME_WAIT 状態のリンクは常に多数存在するため、これはサーバーにとって非常に重要です。

ネット.ipv4.tcp_tw_reuse = 1

#キープアライブが有効な場合、TCP がキープアライブ メッセージを送信する頻度。デフォルトは 2 時間です。10 分に設定すると、無効なリンクをより速くクリアできます。

ner.ipv4.tcp_keepalive_time = 600

#サーバーが積極的に接続を閉じると、ソケットはFIN_WAIT_2状態に長時間留まります

ネット.ipv4.tcp_fin_timeout = 30

#このパラメータは、オペレーティング システムで許可される TIME_WAIT ソケットの最大数を示します。この数を超えると、TIME_WAIT ソケットは直ちにクリアされ、警告メッセージが出力されます。

#このパラメータのデフォルトは 180000 です。TIME_WAIT ソケットが多すぎると、Web サーバーの速度が低下します。

ネット.ipv4.tcp_max_tw_buckets = 5000

#UDP および TCP リンクのローカル ポートの値の範囲を定義します。

net.ipv4.ip_local_port_range = 1024 65000

#TCP受信バッファの最小値、デフォルト値、最大値を定義します。

ネット.ipv4.tcp_rmem = 10240 87380 12582912

#TCP送信バッファの最小値、デフォルト値、最大値を定義します。

ネット.ipv4.tcp_wmem = 10240 87380 12582912

#ネットワーク カードがデータ パケットを受信する速度がカーネルの処理速度よりも速い場合、これらのデータ パケットを保存するためのキューが存在します。このパラメータはキューの大きい値を表します。

net.core.netdev_max_backlog = 8096

#カーネル ソケットがバッファのデフォルト サイズを受け入れることを示します。

ネットコアrmem_default = 6291456

#カーネルソケット送信バッファのデフォルトサイズを示します。

ネットコアwmem_default = 6291456

#カーネルソケットの受け入れバッファのサイズが大きいことを示します。

ネットコアrmem_max = 12582912

#カーネルソケット送信バッファの最大サイズを示します。

ネットコアのwmem_max = 12582912

注: 上記の 4 つの構成は、ビジネス ロジックと実際のハードウェア コストに基づいて総合的に検討する必要があります。

#パフォーマンスとは関係ありません。 TCP の SYN 攻撃を解決するために使用されます。

ネット.ipv4.tcp_syncookies = 1

#このパラメータは、TCP 3 ウェイ ハンドシェイク確立フェーズ中に受け入れられる SYN 要求キューの最大長を示します。デフォルトは 1024 です。これより大きい値に設定すると、Nginx がビジー状態のため新しい接続を受け入れられない場合に、Linux がクライアントによって開始された接続要求を失うことを防ぐことができます。

ネット.ipv4.tcp_max_syn_backlog = 8192

#このパラメータは、timewait 高速リサイクルを有効にするために使用されます。

ネット.ipv4.tcp_tw_recycle = 1

このオプションのデフォルト値は 128 です。このパラメータは、システムによって同時に開始される TCP 接続の数を調整するために使用されます。同時実行性の高い要求では、デフォルト値によって接続タイムアウトまたは再送信が発生する可能性があるため、この値は同時実行性の高い要求の数と組み合わせて調整する必要があります。

ネットコアsomaxconn=262114

#オプションは、システム内の、どのユーザー ファイル ハンドルにも関連付けられていない TCP ソケットの最大数を設定するために使用されます。この数を超えると、孤立したリンクは直ちにリセットされ、警告メッセージが出力されます。この制限は、単純な DOS 攻撃を防ぐために、この制限に過度に依存したり、この値を減らすことを考えたりしないことを意味します。多くの場合、この値を増やします。

ネット.ipv4.tcp_max_orphans=262114

使いやすさのために、以下を直接コピーすることができます

ネット.ipv4.tcp_tw_reuse = 1
fs.ファイル最大 = 999999
ネット.ipv4.tcp_fin_timeout = 30
ner.ipv4.tcp_keepalive_time = 600

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 高い同時実行性の下でNginxのパフォーマンスを最適化する方法をまとめます
  • 高同時実行シナリオにおける nginx 最適化の詳細な説明
  • Nginx+Lua+Redis は高並列 Web アプリケーションを構築します
  • Lvs+Nginx クラスターを使用して高並列アーキテクチャを構築する例

<<:  Vueの最初のレンダリングのプロセス全体についての簡単な説明

>>:  MySQL データベース テーブルのパーティション分割に関する考慮事項 [推奨]

推薦する

WeChatミニプログラムページとコンポーネント間の情報伝達と機能呼び出し

今回は、私自身の開発経験を踏まえて、以下の観点で関連内容を解説します。ページからコンポーネントにデー...

Vue の基本 MVVM、テンプレート構文、データバインディング

目次1. Vueの概要Vue公式サイトMVVM アーキテクチャ パターンVue の紹介2. Vueを...

Docker を使用して Redis マスター スレーブ レプリケーション クラスターを構築する

マスタースレーブレプリケーションモードのクラスターでは、通常、1 つのマスターノードと 2 つ以上の...

Dockerはクロスプラットフォーム機能を実現するためにnet5プログラムを導入

展開環境: ここでは docker コンテナ、Linux システム、VmWare 仮想マシンが使用さ...

...

HTML ウェブページにおけるさまざまなフォント形式の詳細

このセクションでは、テキストの変更の詳細から始めます。これにより、読者はさまざまな HTML フォン...

js での遅延読み込みとプリロードの具体的な使用法

遅延読み込み(レイジー読み込み)とプリロードは、Web 最適化によく使用される手段です。 。 1. ...

MySQL データベース アカウントの作成、認証、データのエクスポートおよびインポート操作の例

この記事では、MySQL データベースでのアカウントの作成、認証、データのエクスポートおよびインポー...

システム外のフォント参照とトランジション効果

コードをコピーコードは次のとおりです。 <span style="font-fami...

AngularJSループオブジェクトプロパティで動的列を実装するアイデアの詳細な説明

動的な列を実現するための Angularjs ループ オブジェクト プロパティ利点: オブジェクトを...

Webpackを使用して複数ページのプログラムを構築するための実装手順

webpack を使用してシングルページのプログラムを構築することは非常に一般的ですが、実際の開発で...

レム適応の一般的なパッケージ3つについて

序文以前、rem適応についての記事を書きましたが、具体的なパッケージは紹介しませんでした。今日は、よ...

要素 ui の el-table の列にさまざまなスタイルのデータを動的に実装する例

問題の説明Ele.me UI のフレームワークでは、入力データは el-form であり、出力データ...

Linux 面接で最もよく聞かれる 10 の質問のまとめ

序文Linux システムの運用および保守エンジニア職の面接を受ける場合は、次の 10 個の最も一般的...

Dockerでmongodbデータベースを使用するための実装コード

mongoイメージを取得する sudo docker pull mongo mongodbサービスを...