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 データベース テーブルのパーティション分割に関する考慮事項 [推奨]

推薦する

Vueプロジェクトを大画面に適応させる方法の例

レムの簡単な分析まず、remはCSS単位です。pxの固定ピクセル単位と比較すると、remはより柔軟性...

ホストNginx + Docker WordPress Mysqlを設定するための詳細な手順

環境Linux 3.10.0-693.el7.x86_64 Docker バージョン 18.09.0...

MySQL での大規模トランザクションによって発生する挿入の遅延ケースの分析

【質問】 INSERT 文は最も一般的な SQL 文の 1 つです。最近、MySQL サーバーが同時...

MySQL 5.0.96 for Windows x86 32 ビット グリーン簡易版インストール チュートリアル

MySQL 5.0 は、いくつかの「高度な機能」があるため定番となっています。これは、Windows...

CSS でリスト スタイル属性を設定する方法 (この記事を読むだけ)

リストスタイルのプロパティHTMLには、順序なしリストと順序ありリストの2種類のリストがあります。仕...

HTML でフレームセット タグを使用するチュートリアル

フレームセット ページは通常の Web ページとは多少異なります。依然として <HTML>...

TomcatとJDKのバージョンの対応と各Tomcatバージョンの機能

Apache Tomcat は、Java Servlet および Java Server Pages...

flex-grow、flex-shrink、flex-basis、9グリッドレイアウトを理解する

1. flex-grow、flex-shrink、flex-basis プロパティflex-grow...

JavaScript の実行コンテキストとコールスタックの詳細な説明

目次1. 実行コンテキストとは何か2. 実行コンテキスト スタックとは何ですか? 3. 実行コンテキ...

ウェブデザインと制作の一般的な原則をまとめる

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

Vueソースコード解析における仮想DOMの詳しい説明

なぜ仮想DOMが必要なのでしょうか?仮想 DOM はブラウザのパフォーマンス問題を解決するために設計...

MySQL の挿入およびバッチ ステートメントのいくつかの例の詳細な説明

目次序文1.無視を挿入2. 重複キーの更新時3. を置き換える4.存在しない場合は挿入する5. デー...

Vue ページ印刷で自動ページングを実装する 2 つの方法

この記事では、ページ印刷の自動ページングを実現するためのVueの具体的なコードを例として紹介します。...

HTMLでアンカーの位置を設定するためのいくつかの一般的な方法

HTML でアンカーの位置を設定する方法はいくつかあるので、ここで紹介します。 1. ID ポジショ...

原因不明のMySqlサービス消失の解決策

原因不明のMySqlサービス消失の解決策先ほど、MySQL-Front が突然 MySql を開けな...