高並列処理 nginx サーバー向け Linux カーネル最適化構成の説明

高並列処理 nginx サーバー向け Linux カーネル最適化構成の説明

デフォルトの Linux カーネル パラメータは最も一般的なシナリオに基づいており、高い同時アクセスをサポートする Web サーバーの定義を満たしていないことは明らかです。そのため、Nginx のパフォーマンスを向上させるには、Linux カーネル パラメータを変更する必要があります。

カーネルを最適化する際にできることはたくさんありますが、通常はビジネスの特性に応じて調整します。Nginx を静的 Web コンテンツ サーバー、リバース プロキシ、または圧縮を提供するサーバーとして使用する場合、カーネル パラメータの調整は異なります。ここでは、Nginx がより多くの同時リクエストをサポートできるようにする最も一般的な TCP ネットワーク パラメータの簡単な構成を行います。

以下の Linux システム カーネルの最適化構成は、オンライン ビジネス システムによってテストされており、約 100,000 の同時接続を持つサーバーで正常に動作しています。整理するのに時間がかかりましたが、ここで皆さんと共有したいと思います。専門家の方が構成に問題があると感じた場合は、ぜひ指摘してください。

# TCPシンクッキーの使用を制御します

# は再利用を有効にすることを示します。 TIME-WAIT ソケットを新しい TCP 接続に再利用できるようにします。デフォルト値は 0 で、閉じていることを意味します。
ネット.ipv4.tcp_syncookies = 1

#接続要求が多い場合にカーネルの動作を制御するブールフラグ。有効にすると、サービスが過負荷になった場合にカーネルが積極的に RST パケットを送信します。
net.ipv4.tcp_abort_on_overflow = 1

#システムが同時に維持できる TIME_WAIT の最大数を示します。この数を超えると、TIME_WAIT は直ちにクリアされ、警告メッセージが出力されます。
#デフォルト値は180000ですが、6000に変更してください。 ApacheやNginxなどのサーバーの場合、このパラメータはTIME_WAITの最大数を制御できます。TIME_WAITの数が多いとサーバーは遅くなります。net.ipv4.tcp_max_tw_buckets = 6000

#選択的応答 net.ipv4.tcp_sack = 1

#このファイルは、TCP/IP セッションのスライディング ウィンドウ サイズが可変かどうかを示します。パラメータ値はブール値で、1 は変更可能、0 は不変であることを意味します。 TCP/IP は通常、高速ネットワークに適した 65535 バイトの最大ウィンドウ サイズを使用します。
#この値は小さすぎる可能性があります。この機能を有効にすると、TCP/IP スライディング ウィンドウのサイズを数桁増やすことができ、データ転送容量が向上します。
net.ipv4.tcp_window_scaling = 1

#TCP受信バッファ net.ipv4.tcp_rmem = 4096 87380 4194304

#TCP 送信バッファ net.ipv4.tcp_wmem = 4096 66384 4194304

# # ソケットメモリ不足
ネット.ipv4.tcp_mem = 94500000 915000000 927000000

#このファイルは、各ソケットに許可される最大バッファ サイズを示します。
ネットコアオプトメモリ_max = 81920

#このファイルは、送信ソケット バッファ サイズのデフォルト値 (バイト単位) を指定します。
ネットコアwmem_default = 8388608

#送信ソケット バッファの最大サイズ (バイト単位) を指定します。
ネットコアのwmem_max = 16777216

#受信ソケット バッファ サイズのデフォルト値 (バイト単位) を指定します。
ネットコアrmem_default = 8388608

#受信ソケット バッファの最大サイズ (バイト単位) を指定します。
ネットコアrmem_max = 16777216

#SYN キューの長さを示します。デフォルトは 1024 です。キューの長さを 10200000 に増やすと、接続を待機しているネットワーク接続の数を増やすことができます。

ネット.ipv4.tcp_max_syn_backlog = 1020000

#各ネットワーク インターフェイスがパケットを受信する速度がカーネルがこれらのパケットを処理する速度よりも速い場合に、キューに送信できるパケットの最大数。
ネット.コア.ネットdev_max_backlog = 862144

#Web アプリケーションの listen 関数のバックログにより、カーネル パラメータ net.core.somaxconn がデフォルトで 128 に制限され、nginx によって定義された NGX_LISTEN_BACKLOG はデフォルトで 511 になるため、この値を調整する必要があります。
ネット.コア.somaxconn = 262144

# システム内で、どのユーザー ファイル ハンドルにも関連付けられていない TCP ソケットの最大数。この数を超えると、孤立した接続は直ちにリセットされ、警告メッセージが出力されます。


#この制限は単純なDoS攻撃を防ぐためだけのものです。これに頼りすぎたり、この値を人為的に減らしたりしないでください。代わりに、この値を増やしてください。net.ipv4.tcp_max_orphans = 327680

#Timestamp を使用すると、シーケンス番号の折り返しを回避できます。 1Gbps リンクでは、以前に使用されたシーケンス番号が必ず発生します。タイムスタンプにより、カーネルはそのような「異常な」パケットを受け入れることができます。これをオフにする必要があります。
net.ipv4.tcp_timestamps = 0

#もう一方の端との接続を開くには、カーネルは前の SYN に応答して SYN と ACK を送信する必要があります。これは、いわゆる 3 ウェイ ハンドシェイクにおける 2 回目のハンドシェイクです。この設定は、接続を放棄する前にカーネルが送信する SYN+ACK パケットの数を決定します。
ネット.ipv4.tcp_synack_retries = 1

#カーネルが接続の確立を諦める前に送信する SYN パケットの数。ホームページ
ネット.ipv4.tcp_syn_retries = 1

#TCP 接続で TIME-WAIT ソケットの高速リサイクルを有効にすることを示します。デフォルト値は 0 で、シャットダウンを示します。
ネット.ipv4.tcp_tw_recycle = 1

# は再利用を有効にすることを示します。 TIME-WAIT ソケットを新しい TCP 接続に再利用できるようにします。デフォルト値は 0 で、閉じていることを意味します。
ネット.ipv4.tcp_tw_reuse = 1

#システムのデフォルトのTIMEOUT時間を変更します。
ネット.ipv4.tcp_fin_timeout = 15

#キープアライブが有効な場合に TCP がキープアライブ メッセージを送信する頻度を示します。デフォルト値は 2 時間ですが、20 分に変更することをお勧めします。
ネット.ipv4.tcp_keepalive_time = 30

# は、送信接続に使用されるポート範囲を示します。デフォルトは非常に小さいです: 32768 ~ 61000、10000 ~ 65000 に変更します。 (注意: 最小値を低く設定しすぎないでください。そうしないと、通常のポートが占有される可能性があります。)
net.ipv4.ip_local_port_range = 1024 65000

#以下では、ip_conntrack モジュール modprobe ip_conntrack のロードが必要になる場合があります。一部のドキュメントでは、このモジュールはファイアウォールがオンになっている場合は無効であると記載されています。#確立された net.netfilter.nf_conntrack_tcp_timeout_established = 180 のタイムアウトを短縮します

#CONNTRACK_MAX 最大許容接続追跡エントリ数。これは、カーネル メモリ内で netfilter が同時に処理できる「タスク」(接続追跡エントリ) です。
ネット.netfilter.nf_conntrack_max = 1048576
ネット.nf_conntrack_max = 1048576

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • google-perftools を使用して高同時実行時の nginx パフォーマンスを最適化するチュートリアル (完全版)
  • 単一のウェブサーバーでウェブサイトのパフォーマンスを最大化する方法
  • Nginx10m+の高並列カーネル最適化に関する簡単な説明
  • 高同時実行シナリオにおける nginx 最適化の詳細な説明
  • 高い同時実行性の下でNginxのパフォーマンスを最適化する方法をまとめます

<<:  MySQL IN ステートメントにおける低速クエリの効率を最適化する手法の例

>>:  jsはaudioContextを通じて3Dサウンド効果を実現します

推薦する

JS での Reduce() メソッドの使用の概要

目次1. 文法2. 例3. その他の関連方法長い間、reduce() メソッドの具体的な使い方を理解...

テーブルを使用する場合と CSS を使用する場合 (経験の共有)

TW のメインテキスト ページは、以前は小さなモニターと低解像度のユーザーを考慮して幅が 850 ピ...

mysql5.7.14 解凍版インストールグラフィックチュートリアル

MySQL は、コミュニティ エディション (コミュニティ サーバー) とエンタープライズ エディシ...

MySQL のストレージ エンジンの違いと比較

MyISAM ストレージエンジンMyISAM は ISAM ストレージ エンジンに基づいており、それ...

CSS BEM 命名標準の概要 (推奨)

1 BEM命名標準とはBem は、ブロック、要素、修飾子の略語であり、Yandex チームによって...

Vueはカルーセルのフレームレート再生を実装します

この記事の例では、カルーセルのフレームレート再生を実現するためのVueの具体的なコードを参考までに共...

JavaScript を使用してハイパーリンクのリダイレクトを防ぐ方法 (複数の書き方)

JavaScript を使用すると、ハイパーリンクがジャンプするのを防ぐことができます。方法は次の...

Docker Nginxコンテナの制作と展開の実装方法

クイックスタート1. Docker Hubでnginxイメージを見つけるdocker 検索 ngin...

Linuxファイアウォールiptablesの詳細な紹介、設定方法と事例

1.1 iptablesファイアウォールの概要Netfilter/Iptables (以下、Ipta...

nginxリバースプロキシによるセッション障害の問題の解決策

同僚から助けを求められました。バックエンド システムへのログインは成功したものの、システムには正常に...

js の Array.forEach でループを終了する方法の例

目次forEach() メソッドjs の Array.forEach のループから抜け出す方法解決:...

MySQL のロックに関する問題

ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...

複数の Docker コンテナが同じポート番号を持たない場合の解決策

背景Dockerでは、同じイメージを使用して4つのコンテナを作成します。ネットワークはブリッジモード...

CentOS8 システムをベースにした Gitlab を構築するために Docker を使用する詳細なチュートリアル

目次1. Dockerをインストールする2. GitLabをインストールする3. GitLabを初期...

JavaScript データ プロキシとイベントの詳細な分析

目次データブローカーとイベントObject.defineProperty メソッドのレビューデータブ...