高並列処理 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サウンド効果を実現します

推薦する

アルバムと写真をアルバムに保存するためのWeChatアプレット

私は現在、Xiao Nian Gao に似たビデオおよびツール アプリを開発しています。ユーザーが作...

MySQL パーティションテーブルの制限と制約の詳細な説明

ビルドを無効にするパーティション式では、次の構成はサポートされません。ストアドプロシージャ、ストアド...

HTMLタグのデフォルトスタイルの配置

html、address、blockquote、body、dd、div、dl、dt、fieldset...

MySQL サービスとデータベース管理

目次1. サービスの開始と停止の手順1.1 Windows での MySQL 5.7 の公式 MSI...

MySQL データベースの最適化: テーブルとデータベースのシャーディング操作の詳細な説明

この記事では、例を使用して、MySQL データベースの最適化のためのテーブルおよびデータベース シャ...

入力ボックスのコンテンツプロンプトと非表示機能を実装する JavaScript

入力ボックスが小さい場合、内容を入力した後に、入力内容が拡大されたプロンプト ボックスを表示したいこ...

JavaScript の構造化代入の一般的なシナリオと例 5 つ

目次序文1. データを抽出する2. エイリアス値3. 動的プロパティ4. オブジェクトの分解における...

標準のMySQL (x64) Windowsバージョンのインストール手順の詳細な説明

MySQL x64 はインストーラーを提供していません、インストーラーを提供していません、インストー...

Linux システムの .bash_profile ファイルの詳細な説明

目次1. 環境変数$PATH: 2. 環境変数を変更します。 3. bash_profileの目的要...

Vue マルチ選択リスト コンポーネントの詳細な説明

マルチ選択は、すべてのオプションを一覧表示し、ユーザーが Ctrl/Shift キーを使用して複数選...

vue+canvasでタイムラインを描く方法

この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容...

Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法

目次1. Dockerファイル2. pom 構成3. イメージプッシュ4. k8s デプロイメント前...

リモートログインとポート公開を防ぐためのLinuxサーバー構成IPホワイトリスト

序文ブロガーが使用しているサーバーは Alibaba Cloud から購入したものです。実際、Ali...

MySQL でタイムスタンプを日付に変換する例

序文職場で次のような状況に遭遇しました。ログ システムのテーブルでは、時間フィールドには日付データで...

HTMLおよびJSPページがキャッシュされ、Webサーバーから再取得されるのを防ぎます。

ユーザーがログアウトした後、ブラウザの戻るボタンがクリックされると、Web アプリケーションは保護さ...